use strict;
use Test::More tests => 14;
+my %rx_idx;
+BEGIN {
+ %rx_idx = (
+ q[$`] => -2,
+ q[$'] => -1,
+ q[$&] => 0,
+ );
+ if ("$]" >= 5.019_004) {
+ # This should be the case since 5.17.4 but there's a bug in perl that
+ # was fixed in 5.19.4 which caused the FETCH callback to get the old
+ # indices.
+ $rx_idx{q[${^PREMATCH}]} = -5;
+ $rx_idx{q[${^POSTMATCH}]} = -4;
+ $rx_idx{q[${^MATCH}]} = -3;
+ } else {
+ $rx_idx{q[${^PREMATCH}]} = $rx_idx{q[$`]};
+ $rx_idx{q[${^POSTMATCH}]} = $rx_idx{q[$']};
+ $rx_idx{q[${^MATCH}]} = $rx_idx{q[$&]};
+ }
+}
+
use re::engine::Plugin (
exec => sub {
my $re = shift;
+ if ("$]" >= 5.017_004) {
+ my %full_name_map = (
+ -2 => -5,
+ -1 => -4,
+ 0 => -3,
+ );
+ }
+
$re->stash( [
- [ -2, "a" ],
- [ -2, "a" ],
- [ -1, "o" ],
- [ -1, "o" ],
- [ 0, "e" ],
- [ 0, "e" ],
- [ 1, "u" ],
+ [ q[$`], "a" ],
+ [ q[${^PREMATCH}], "a" ],
+ [ q[$'], "o" ],
+ [ q[${^POSTMATCH}], "o" ],
+ [ q[$&], "e" ],
+ [ q[${^MATCH}], "e" ],
+ [ \1, "u" ],
]);
$re->num_captures(
my ($re, $paren, $sv) = @_;
my $test = shift @{ $re->stash };
- is($paren, $test->[0]);
- is($sv, $test->[1]);
+ my $desc;
+ my $idx = $test->[0];
+ if (ref $idx) {
+ $idx = $$idx;
+ $desc = "STORE \$$idx";
+ } else {
+ $desc = "STORE $idx";
+ $idx = $rx_idx{$idx};
+ }
+
+ is($paren, $idx, "$desc (index)");
+ is($sv, $test->[1], "$desc (value)");
},
);