summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-01-25 19:10:53 -0600
committerJesse Luehrs <doy@tozt.net>2011-01-25 19:10:53 -0600
commit39813bfb03d6a4d8f8a1401f90db9ce9b73583e9 (patch)
treecc2dc7da1c3a7f4a616d0f2f0ab364ef55e14bb9
parent0312852d41b045f02621903d92111bfed2547a4e (diff)
downloadcircular-require-39813bfb03d6a4d8f8a1401f90db9ce9b73583e9.tar.gz
circular-require-39813bfb03d6a4d8f8a1401f90db9ce9b73583e9.zip
handle 'require VERSION' properly on 5.8
-rw-r--r--lib/circular/require.pm12
-rw-r--r--t/02-version.t10
-rw-r--r--t/02/Foo.pm3
3 files changed, 21 insertions, 4 deletions
diff --git a/lib/circular/require.pm b/lib/circular/require.pm
index d5586ac..c4d6e1f 100644
--- a/lib/circular/require.pm
+++ b/lib/circular/require.pm
@@ -42,12 +42,16 @@ my $saved;
sub _require {
my ($file) = @_;
- if (exists $seen{$file} && !$seen{$file}) {
- warn "Circular require detected: $file (from " . caller() . ")\n";
+ # on 5.8, if a value has both a string and numeric value, require will
+ # treat it as a vstring, so be sure we don't use the incoming value in
+ # string contexts at all
+ my $string_file = $file;
+ if (exists $seen{$string_file} && !$seen{$string_file}) {
+ warn "Circular require detected: $string_file (from " . caller() . ")\n";
}
- $seen{$file} = 0;
+ $seen{$string_file} = 0;
my $ret = $saved ? $saved->($file) : CORE::require($file);
- $seen{$file} = 1;
+ $seen{$string_file} = 1;
return $ret;
}
diff --git a/t/02-version.t b/t/02-version.t
new file mode 100644
index 0000000..ac3567b
--- /dev/null
+++ b/t/02-version.t
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use lib 't/02';
+use Test::More;
+
+no circular::require;
+use_ok('Foo');
+
+done_testing;
diff --git a/t/02/Foo.pm b/t/02/Foo.pm
new file mode 100644
index 0000000..67de8a7
--- /dev/null
+++ b/t/02/Foo.pm
@@ -0,0 +1,3 @@
+package Foo;
+use 5.008001;
+1;