make sure VERSION is numified
[p5sagit/strictures.git] / lib / strictures.pm
index ac51ccc..a64cc45 100644 (file)
@@ -3,28 +3,29 @@ package strictures;
 use strict;
 use warnings FATAL => 'all';
 
-use constant _PERL_LT_5_8_4 => ($] < 5.008004) ? 1 : 0;
+BEGIN {
+  *_PERL_LT_5_8_4 = ($] < 5.008004) ? sub(){1} : sub(){0};
+}
 
-our $VERSION = '1.004004'; # 1.4.4
+our $VERSION = '1.005005';
+$VERSION = eval $VERSION;
 
 sub VERSION {
-  for ($_[1]) {
+  my ($class, $version) = @_;
+  for ($version) {
     last unless defined && !ref && int != 1;
     die "Major version specified as $_ - this is strictures version 1";
   }
-  # disable this since Foo->VERSION(undef) correctly returns the version
-  # and that can happen either if our caller passes undef explicitly or
-  # because the for above autovivified $_[1] - I could make it stop but
-  # it's pointless since we don't want to blow up if the caller does
-  # something valid either.
+  # passing undef here may either warn or die depending on the version of perl.
+  # we can't match the caller's warning state in this case, so just disable the
+  # warning.
   no warnings 'uninitialized';
   shift->SUPER::VERSION(@_);
 }
 
 our $extra_load_states;
 
-our $Smells_Like_VCS = (-e '.git' || -e '.svn'
-  || (-e '../../dist.ini' && (-e '../../.git' || -e '../../.svn')));
+our $Smells_Like_VCS;
 
 sub import {
   strict->import;
@@ -38,8 +39,13 @@ sub import {
       }
       $ENV{PERL_STRICTURES_EXTRA};
     } elsif (! _PERL_LT_5_8_4) {
-      !!((caller)[1] =~ /^(?:t|xt|lib|blib)/
-         and $Smells_Like_VCS)
+      (caller)[1] =~ /^(?:t|xt|lib|blib)[\\\/]/
+        and defined $Smells_Like_VCS ? $Smells_Like_VCS
+          : ( $Smells_Like_VCS = !!(
+            -e '.git' || -e '.svn' || -e '.hg'
+            || (-e '../../dist.ini'
+              && (-e '../../.git' || -e '../../.svn' || -e '../../.hg' ))
+          ))
     }
   };
   if ($extra_tests) {
@@ -102,11 +108,11 @@ is equivalent to
 
 except when called from a file which matches:
 
-  (caller)[1] =~ /^(?:t|xt|lib|blib)/
+  (caller)[1] =~ /^(?:t|xt|lib|blib)[\\\/]/
 
-and when either C<.git> or C<.svn> is present in the current directory (with
-the intention of only forcing extra tests on the author side) -- or when C<.git>
-or C<.svn> is present two directories up along with C<dist.ini> (which would
+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<dist.ini> (which would
 indicate we are in a C<dzil test> operation, via L<Dist::Zilla>) --
 or when the C<PERL_STRICTURES_EXTRA> environment variable is set, in which case
 
@@ -232,6 +238,24 @@ desirable from a point of view of providing new users with as much safety as pos
 and will allow any future discussion on the subject to focus on "how do we
 minimise annoyance to people deploying from checkouts intentionally".
 
+=head1 SEE ALSO
+
+=over 4
+
+=item *
+
+L<indirect>
+
+=item *
+
+L<multidimensional>
+
+=item *
+
+L<bareword::filehandles>
+
+=back
+
 =head1 COMMUNITY AND SUPPORT
 
 =head2 IRC channel
@@ -260,6 +284,8 @@ Karen Etheridge (cpan:ETHER) <ether@cpan.org>
 
 Mithaldu - Christian Walde (cpan:MITHALDU) <walde.christian@gmail.com>
 
+haarg - Graham Knop (cpan:HAARG) <haarg@haarg.org>
+
 =head1 COPYRIGHT
 
 Copyright (c) 2010 the strictures L</AUTHOR> and L</CONTRIBUTORS>