fix ->VERSION calls to query version in newer perls
Graham Knop [Wed, 12 Feb 2014 18:25:09 +0000 (13:25 -0500)]
lib/strictures.pm
t/strictures.t

index f979fa2..7c517b9 100644 (file)
@@ -10,15 +10,14 @@ BEGIN {
 our $VERSION = '1.005002'; # 1.5.2
 
 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(@_);
 }
index 877439b..58104fa 100644 (file)
@@ -34,6 +34,10 @@ foreach my $idx (0 .. $#us) {
   is($us[$idx][1], $expect[$idx][1], 'Warnings ok for case '.($idx+1));
 }
 
+my $v;
+eval { $v = strictures->VERSION; 1 } or diag $@;
+is $v, $strictures::VERSION, '->VERSION returns version correctly';
+
 SKIP: {
   skip 'Extra tests disabled on perls <= 5.008003', 1
     if $] < 5.008004;