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 Pragmatic Modules.
If rather than formatting bugs, you encounter substantive content errors in these documents, such as mistakes in the explanations or code, please use the perlbug utility included with the Perl distribution.