See the current Perl documentation for lib:strict.
Here is our local, out-dated (pre-5.6) version:
strict - Perl pragma to restrict unsafe constructs
use strict;
use strict "vars"; use strict "refs"; use strict "subs";
use strict; no strict "vars";
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.) Currently, there are three possible things to be strict about: ``subs'', ``vars'', and ``refs''.
use strict 'refs'; $ref = \$foo; print $$ref; # ok $ref = "foo"; print $$ref; # runtime error; normally ok
use vars
, localized via my or wasn't fully qualified. Because this is to avoid variable suicide problems and subtle dynamic scoping issues, a merely
local()
variable isn't good enough. See
my and
local.
use strict 'vars'; $X::foo = 1; # ok, fully qualified my $foo = 10; # ok, my() var local $foo = 9; # blows up
package Cinna; use vars qw/ $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
qualifying it.
use strict 'subs'; $SIG{PIPE} = Plumber; # blows up $SIG{PIPE} = "Plumber"; # just fine: bareword in curlies always ok $SIG{PIPE} = \&Plumber; # preferred form
See perlmodlib.