diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/strict.pm')
-rw-r--r-- | Master/tlpkg/tlperl/lib/strict.pm | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/Master/tlpkg/tlperl/lib/strict.pm b/Master/tlpkg/tlperl/lib/strict.pm index 053aae75012..63a89dd8f4e 100644 --- a/Master/tlpkg/tlperl/lib/strict.pm +++ b/Master/tlpkg/tlperl/lib/strict.pm @@ -1,6 +1,6 @@ package strict; -$strict::VERSION = "1.04"; +$strict::VERSION = "1.07"; # Verify that we're called correctly so that strictures will work. unless ( __FILE__ =~ /(^|[\/\\])\Q${\__PACKAGE__}\E\.pmc?$/ ) { @@ -14,12 +14,20 @@ refs => 0x00000002, subs => 0x00000200, vars => 0x00000400 ); +my %explicit_bitmask = ( +refs => 0x00000020, +subs => 0x00000040, +vars => 0x00000080 +); sub bits { my $bits = 0; my @wrong; foreach my $s (@_) { - push @wrong, $s unless exists $bitmask{$s}; + if (exists $bitmask{$s}) { + $^H |= $explicit_bitmask{$s}; + } + else { push @wrong, $s }; $bits |= $bitmask{$s} || 0; } if (@wrong) { @@ -29,16 +37,16 @@ sub bits { $bits; } -my $default_bits = bits(qw(refs subs vars)); +my @default_bits = qw(refs subs vars); sub import { shift; - $^H |= @_ ? bits(@_) : $default_bits; + $^H |= bits(@_ ? @_ : @default_bits); } sub unimport { shift; - $^H &= ~ (@_ ? bits(@_) : $default_bits); + $^H &= ~ bits(@_ ? @_ : @default_bits); } 1; @@ -91,17 +99,17 @@ is allowed so that C<goto &$AUTOLOAD> would not break under stricture. =item C<strict vars> -This generates a compile-time error if you access a variable that wasn't -declared via C<our> or C<use vars>, -localized via C<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 L<perlfunc/my> and -L<perlfunc/local>. +This generates a compile-time error if you access a variable that was +neither explicitly declared (using any of C<my>, C<our>, C<state>, or C<use +vars>) nor fully qualified. (Because this is to avoid variable suicide +problems and subtle dynamic scoping issues, a merely C<local> variable isn't +good enough.) See L<perlfunc/my>, L<perlfunc/our>, L<perlfunc/state>, +L<perlfunc/local>, and L<vars>. use strict 'vars'; $X::foo = 1; # ok, fully qualified my $foo = 10; # ok, my() var - local $foo = 9; # blows up + local $baz = 9; # blows up, $baz not declared before package Cinna; our $bar; # Declares $bar in current package |