Cari di Perl 
    Perl User Manual
Daftar Isi
(Sebelumnya) Perl pragma to control sort() ...Perl pragma to predeclare sub names (Berikutnya)
Pragmas

Perl pragma to restrict unsafe constructs

Daftar Isi

NAME

strict - Perl pragma to restrict unsafe constructs

SYNOPSIS

  1. use strict;
  2. use strict "vars";
  3. use strict "refs";
  4. use strict "subs";
  5. use strict;
  6. 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 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).

    1. use strict 'refs';
    2. $ref = \$foo;
    3. print $$ref;# ok
    4. $ref = "foo";
    5. print $$ref;# runtime error; normally ok
    6. $file = "STDOUT";
    7. print $file "Hi!";# error; note: no comma after $file

    There is one exception to this rule:

    1. $bar = \&{'foo'};
    2. &$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.

    1. use strict 'vars';
    2. $X::foo = 1; # ok, fully qualified
    3. my $foo = 10; # ok, my() var
    4. local $baz = 9; # blows up, $baz not declared before
    5. package Cinna;
    6. our $bar;# Declares $bar in current package
    7. $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.

    1. use strict 'subs';
    2. $SIG{PIPE} = Plumber; # blows up
    3. $SIG{PIPE} = "Plumber"; # just fine: quoted string is always ok
    4. $SIG{PIPE} = \&Plumber; # preferred form

See Pragmatic Modules in perlmodlib.

HISTORY

strict '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

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

 
Source : perldoc.perl.org - Official documentation for the Perl programming language
Site maintained by Jon Allen (JJ)     See the project page for more details
Documentation maintained by the Perl 5 Porters
(Sebelumnya) Perl pragma to control sort() ...Perl pragma to predeclare sub names (Berikutnya)