The fix follows Zefram's suggestion from
https://www.nntp.perl.org/group/perl.perl5.porters/2012/05/msg186846.html
On older perls, however, $] had a numeric value that was built up using
floating-point arithmetic, such as 5+0.006+0.000002. This would not
necessarily match the conversion of the complete value from string form
[perl #72210]. You can work around that by explicitly stringifying
$] (which produces a correct string) and having that numify (to a
correctly-converted floating point value) for comparison. I cultivate
the habit of always stringifying $] to work around this, regardless of
the threshold where the bug was fixed. So I'd write
use if "$]" >= 5.014, warnings => "non_unicode";
This ensures that the comparisons will still work when Perl's major version changes to anything greater than 9.
Revision history for Sub-Name
{{$NEXT}}
+ - fix version comparison logic for forward compatibility
0.27 2023-04-29 12:32:26Z
- skip quote-separator tests on newer perls that deprecate this behaviour
my $expected;
SKIP: {
skip 'single quote as a package separator has been '.
- ("$]" gt '5.041001' ? 'removed' : 'deprecated'), 3
- if $ord == 39 and "$]" gt '5.037009';
+ ("$]" > 5.041001 ? 'removed' : 'deprecated'), 3
+ if $ord == 39 and "$]" > 5.037009;
if ( chr($ord) =~ m/^[$legal_ident_char]$/o ) { # compile directly
$expected = "native::$fullname";
use Sub::Name;
plan skip_all => 'single quote as a package separator has been removed'
- if "$]" gt '5.041001';
+ if "$]" > 5.041001;
plan skip_all => 'single quote as a package separator has been deprecated'
- if "$]" gt '5.037009';
+ if "$]" > 5.037009;
my $sub = sub { (caller(0))[3] };
subname "foo::quz'bar::baz", $sub;