summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;