]> git.vpit.fr Git - perl/modules/re-engine-Plugin.git/blob - t/50-num_buff/FETCH.t
Teach t/50-num_buff/*.t about perl 5.17.4 and newer
[perl/modules/re-engine-Plugin.git] / t / 50-num_buff / FETCH.t
1 use strict;
2 use Test::More tests => 7;
3
4
5 my %rx_idx;
6 BEGIN {
7     %rx_idx = (
8         q[$`] => -2,
9         q[$'] => -1,
10         q[$&] => 0,
11     );
12     if ("$]" >= 5.017_004) {
13         $rx_idx{q[${^PREMATCH}]}  = -5;
14         $rx_idx{q[${^POSTMATCH}]} = -4;
15         $rx_idx{q[${^MATCH}]}     = -3;
16     } else {
17         $rx_idx{q[${^PREMATCH}]}  = $rx_idx{q[$`]};
18         $rx_idx{q[${^POSTMATCH}]} = $rx_idx{q[$']};
19         $rx_idx{q[${^MATCH}]}     = $rx_idx{q[$&]};
20     }
21 }
22
23 use re::engine::Plugin (
24     exec => sub {
25         my $re = shift;
26
27         $re->num_captures(
28             FETCH => sub {
29                 my ($re, $paren) = @_;
30
31                 my %exp = (
32                     q[$`]            => 10,
33                     q[${^PREMATCH}]  => 10,
34                     q[$']            => 20,
35                     q[${^POSTMATCH}] => 20,
36                     q[$&]            => 30,
37                     q[${^MATCH}]     => 30,
38                     1                => 40,
39                 );
40
41                 my %ret;
42                 for (keys %exp) {
43                     if (exists $rx_idx{$_}) {
44                         $ret{$rx_idx{$_}} = $exp{$_};
45                     } else {
46                         $ret{$_}          = $exp{$_};
47                     }
48                 }
49
50                 $ret{$paren};
51             }
52         );
53
54         1;
55     },
56 );
57
58 "a" =~ /a/;
59
60 is($`,            10, '$`');
61 is(${^PREMATCH},  10, '${^PREMATCH}');
62 is($',            20, q($'));
63 is(${^POSTMATCH}, 20, '${^POSTMATCH}');
64 is($&,            30, '$&');
65 is(${^MATCH},     30, '${^MATCH}');
66 is($1,            40, '$1');