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

       `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.

                 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

             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.


Man(1) output converted with man2html