use strict;        # apply all possible restrictions



use strict 'vars'; # restrict unsafe use of variables for rest of block

use strict 'refs'; # restrict unsafe use of references for rest of block

use strict 'subs'; # restrict unsafe use of subroutines for rest of block



no strict 'vars';  # void restrictions on variables for rest of block

no strict 'refs';  # void restrictions on references for rest of block

no strict 'subs';  # void restrictions on subroutines for rest of block

*****

use strict 'refs';

$ref = \$foo;

print $$ref;        # ok

$ref = "foo";

print $$ref;        # run-time error; normally ok

*****

use strict 'vars';

use vars '$foe';

$SomePack::fee = 1;  # ok, fully qualified

my $fie = 10;        # ok, my() var

$foe = 7;            # ok, pseudo-imported by 'use vars'

$foo = 9;            # blows up--did you mistype $foe maybe?

*****

use strict 'subs';



$SIG{PIPE} = Plumber;     # blows up (assuming Plumber sub not defined yet)

$SIG{PIPE} = "Plumber";   # okay, means "main::Plumber" really

$SIG{PIPE} = \&Plumber;   # preferred form

*****

use strict;      # or just:  use strict subs;

[ ... ]

no strict subs;  # WRONG!  Should be:  no strict 'subs';

[ ... ]

*****

use subs qw(sub1 sub2 sub3);

sub1 $arg1, $arg2;

