From 39813bfb03d6a4d8f8a1401f90db9ce9b73583e9 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 25 Jan 2011 19:10:53 -0600 Subject: handle 'require VERSION' properly on 5.8 --- lib/circular/require.pm | 12 ++++++++---- t/02-version.t | 10 ++++++++++ t/02/Foo.pm | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 t/02-version.t create mode 100644 t/02/Foo.pm 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; -- cgit v1.2.3-54-g00ecf