| PragmasPerl pragma to restrict unsafe constructsDaftar Isi NAMEstrict - Perl pragma to restrict unsafe constructs SYNOPSIS- use strict;
- use strict "vars";
- use strict "refs";
- use strict "subs";
- use strict;
- no strict "vars";
DESCRIPTIONIf no import list is supplied, all possible restrictions are assumed.(This is the safest mode to operate in, but is sometimes too strict forcasual programming.) Currently, there are three possible things to bestrict about: "subs", "vars", and "refs". strict refs This generates a runtime error if you use symbolic references (see perlref). - 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 wasneither explicitly declared (using any of my , our , state , or usevars ) nor fully qualified. (Because this is to avoid variable suicideproblems and subtle dynamic scoping issues, a merely local variable isn'tgood enough.) See my, our, state,local, and vars. - use strict 'vars';
- $X::foo = 1; # ok, fully qualified
- my $foo = 10; # ok, my() var
- local $baz = 9; # blows up, $baz not declared before
- 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 globalname without fully qualifying it. Because of their special use by sort(), the variables $a and $b areexempted from this check. strict subs This disables the poetry optimization, generating a compile-time error ifyou try to use a bareword identifier that's not a subroutine, unless itis a simple identifier (no colons) and that it appears in curly braces oron the left hand side of the => symbol. - use strict 'subs';
- $SIG{PIPE} = Plumber; # blows up
- $SIG{PIPE} = "Plumber"; # just fine: quoted string is always ok
- $SIG{PIPE} = \&Plumber; # preferred form
See Pragmatic Modules in perlmodlib. HISTORYstrict 'subs' , with Perl 5.6.1, erroneously permitted to use an unquotedcompound identifier (e.g. Foo::Bar ) as a hash key (before => orinside curlies), but without forcing it always to a literal string.
Starting with Perl 5.8.1 strict is strict about its restrictions:if unknown restrictions are used, the strict pragma will abort with - Unknown 'strict' tag(s) '...'
As of version 1.04 (Perl 5.10), strict verifies that it is used as"strict" to avoid the dreaded Strict trap on case insensitive filesystems. |
| |
|