BEGIN { use FindBin qw($Bin); require "$Bin/test.pl"; plan(tests => 23); } use Regexp::Fields; # # sanity check # $rx = qr/(?.)(?.)(?.)/; ok !defined($&{a}), '!defined($&{a})'; ok !defined($&{x}), '!defined($&{x})'; ok "abc" =~ /$rx/, "'abc' =~ /$rx/"; ok keys %{&} == 3, 'keys %{&} == 3'; is $1, 'a', '$1 eq "a"'; is $2, 'b', '$2 eq "b"'; is $3, 'c', '$3 eq "c"'; is $&{a}, $1, '$&{a} eq $1'; is $&{b}, $2, '$&{b} eq $2'; is $&{c}, $3, '$&{c} eq $3'; # # nested captures # $rx = qr/(? (?.)(?.)(?.))/x; ok "abc" =~ /$rx/, "'abc' =~ /$rx/"; ok keys %{&} == 4, 'keys %{&} == 4'; is $1, 'abc', '$1 eq "abc"'; is $2, 'a', '$2 eq "a"'; is $3, 'b', '$3 eq "b"'; is $4, 'c', '$4 eq "c"'; is $&{all}, $1, '$&{all} eq $1'; is $&{a}, $2, '$&{a} eq $2'; is $&{b}, $3, '$&{b} eq $3'; is $&{c}, $4, '$&{c} eq $4'; # # oblique modifications # { no warnings; $&{a} + 0; $&{b} | 0; $&{c} ^ 0; } is $&{a}, 'a', '$&{a} eq "a" [after addition]'; is $&{b}, 'b', '$&{b} eq "b" [after bitwise OR]'; is $&{c}, 'c', '$&{c} eq "c" [after bitwise AND]';