summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/strict.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/strict.pm')
-rw-r--r--Master/tlpkg/tlperl/lib/strict.pm32
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