X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fstrictures.pm;h=5e12c82531affeb906a65d10f9a023a66e5b8a53;hb=e12af862ff034c1757248c0faf517ad2a917e5c9;hp=a715c60b7184f231ab3f2e79ae890345fca136e7;hpb=07dc8b03715dd0cb8236a75d52481e21344e36df;p=p5sagit%2Fstrictures.git diff --git a/lib/strictures.pm b/lib/strictures.pm index a715c60..5e12c82 100644 --- a/lib/strictures.pm +++ b/lib/strictures.pm @@ -4,20 +4,25 @@ use strict; use warnings FATAL => 'all'; BEGIN { - *_PERL_LT_5_8_4 = ($] < 5.008004) ? sub(){1} : sub(){0}; + *_PERL_LT_5_8_4 = ("$]" < 5.008004) ? sub(){1} : sub(){0}; + # goto &UNIVERSAL::VERSION usually works on 5.8, but fails on some ARM + # machines. Seems to always work on 5.10 though. + *_CAN_GOTO_VERSION = ("$]" >= 5.010000) ? sub(){1} : sub(){0}; } -our $VERSION = '1.999_001'; +our $VERSION = '2.000005'; $VERSION = eval $VERSION; -$VERSION = 2; # a bit of a cheat, but requesting v2 needs to be possible our @WARNING_CATEGORIES = grep { exists $warnings::Offsets{$_} } qw( closure + chmod deprecated exiting experimental experimental::autoderef + experimental::bitwise experimental::const_attr + experimental::declared_refs experimental::lexical_subs experimental::lexical_topic experimental::postderef @@ -71,6 +76,7 @@ our @WARNING_CATEGORIES = grep { exists $warnings::Offsets{$_} } qw( taint threads uninitialized + umask unpack untie utf8 @@ -83,14 +89,16 @@ our @WARNING_CATEGORIES = grep { exists $warnings::Offsets{$_} } qw( ); sub VERSION { - no warnings; - local $@; - if (defined $_[1] && eval { $_[0]->UNIVERSAL::VERSION($_[1]); 1}) { - $^H |= 0x20000 - unless _PERL_LT_5_8_4; - $^H{strictures_enable} = int $_[1]; + { + no warnings; + local $@; + if (defined $_[1] && eval { &UNIVERSAL::VERSION; 1}) { + $^H |= 0x20000 + unless _PERL_LT_5_8_4; + $^H{strictures_enable} = int $_[1]; + } } - goto &UNIVERSAL::VERSION; + _CAN_GOTO_VERSION ? goto &UNIVERSAL::VERSION : &UNIVERSAL::VERSION; } our %extra_load_states; @@ -99,7 +107,7 @@ our $Smells_Like_VCS; sub import { my $class = shift; - my %opts = ref $_[0] ? %{$_[0]} : @_; + my %opts = @_ == 1 ? %{$_[0]} : @_; if (!exists $opts{version}) { $opts{version} = exists $^H{strictures_enable} ? delete $^H{strictures_enable} @@ -193,9 +201,9 @@ sub _want_extra { and $file =~ /^(?:t|xt|lib|blib)[\\\/]/ and defined $Smells_Like_VCS ? $Smells_Like_VCS : ( $Smells_Like_VCS = !!( - -e '.git' || -e '.svn' || -e '.hg' + -e '.git' || -e '.svn' || -e '.hg' || -e '.bzr' || (-e '../../dist.ini' - && (-e '../../.git' || -e '../../.svn' || -e '../../.hg' )) + && (-e '../../.git' || -e '../../.svn' || -e '../../.hg' || -e '../../.bzr' )) )) ); } @@ -239,7 +247,7 @@ EOE __END__ =head1 NAME -strictures - turn on strict and make all warnings fatal +strictures - turn on strict and make most warnings fatal =head1 SYNOPSIS @@ -265,12 +273,12 @@ except when called from a file which matches: (caller)[1] =~ /^(?:t|xt|lib|blib)[\\\/]/ -and when either C<.git>, C<.svn>, or C<.hg> is present in the current directory -(with the intention of only forcing extra tests on the author side) -- or when -C<.git>, C<.svn>, or C<.hg> is present two directories up along with -C (which would indicate we are in a C operation, via -L) -- or when the C environment variable is -set, in which case it also does the equivalent of +and when either C<.git>, C<.svn>, C<.hg>, or C<.bzr> is present in the current +directory (with the intention of only forcing extra tests on the author side) +-- or when C<.git>, C<.svn>, C<.hg>, or C<.bzr> is present two directories up +along with C (which would indicate we are in a C operation, +via L) -- or when the C environment variable +is set, in which case it also does the equivalent of no indirect 'fatal'; no multidimensional;