


strict(3p)       Perl Programmers Reference Guide      strict(3p)


NAME
       strict - Perl pragma to restrict unsafe constructs

SYNOPSIS
           use strict;

           use strict "vars";
           use strict "refs";
           use strict "subs";

           use strict;
           no strict "vars";


DESCRIPTION
       If no import list is supplied, all possible restrictions
       are assumed.  (This is the safest mode to operate in, but
       is sometimes too strict for casual programming.)  Cur-
       rently, there are three possible things to be strict
       about:  "subs", "vars", and "refs".

       ""strict refs""
             This generates a runtime error if you use symbolic
             references (see the perlref manpage).

                 use strict 'refs';
                 $ref = \$foo;
                 print $$ref;        # ok
                 $ref = "foo";
                 print $$ref;        # runtime error; normally ok
                 $file = "STDOUT";
                 print $file "Hi!";  # error; note: no comma after $file

             There is one exception to this rule:

                 $bar = \&{'foo'};
                 &$bar;

             is allowed so that "goto &$AUTOLOAD" would not break
             under stricture.

       ""strict vars""
             This generates a compile-time error if you access a
             variable that wasn't declared via "our" or "use
             vars", localized via "my()", or wasn't fully quali-
             fied.  Because this is to avoid variable suicide
             problems and subtle dynamic scoping issues, a merely
             local() variable isn't good enough.  See the my
             entry in the perlfunc manpage and the local entry in
             the perlfunc manpage.







2001-05-24                 perl v5.6.1                          1





strict(3p)       Perl Programmers Reference Guide      strict(3p)


                 use strict 'vars';
                 $X::foo = 1;         # ok, fully qualified
                 my $foo = 10;        # ok, my() var
                 local $foo = 9;      # blows up

                 package Cinna;
                 our $bar;                   # Declares $bar in current package
                 $bar = 'HgS';               # ok, global declared via pragma

             The local() generated a compile-time error because
             you just touched a global name without fully quali-
             fying it.

             Because of their special use by sort(), the vari-
             ables $a and $b are exempted from this check.

       ""strict subs""
             This disables the poetry optimization, generating a
             compile-time error if you try to use a bareword
             identifier that's not a subroutine, unless it
             appears in curly braces or on the left hand side of
             the "=>" symbol.

                 use strict 'subs';
                 $SIG{PIPE} = Plumber;       # blows up
                 $SIG{PIPE} = "Plumber";     # just fine: bareword in curlies always ok
                 $SIG{PIPE} = \&Plumber;     # preferred form


       See the Pragmatic Modules entry in the perlmodlib manpage.



























2001-05-24                 perl v5.6.1                          2


