I was aware of that and my results are exactly like yours.
In the following I just need to silence the warnings about undef values.
use v5.12; use warnings; use Data::Dump qw(pp); my $cb = sub { say "matched, captured ", pp @_; }; for my $str ("AB","") { for my $re (qr/../, qr/(.)(.)/, qr/(X)?(.)/, qr/XY/, qr/(X)Y/, qr/ +/) { say "--- str <$str> re $re "; if ( my (@caps_0) = ($str =~ $re) ) { my @caps = @caps_0; $#caps = $#- - 1; # reset pseudo capture $cb->(@caps); @caps = @caps_0; no warnings 'uninitialized'; @caps = () if $caps[0] ne $1; # reset pseudo capture $cb->(@caps); } else { say 'NO match'; } say "\n"; } }
--- str <AB> re (?^u:..) matched, captured () matched, captured () --- str <AB> re (?^u:(.)(.)) matched, captured ("A", "B") matched, captured ("A", "B") --- str <AB> re (?^u:(X)?(.)) matched, captured (undef, "A") matched, captured (undef, "A") --- str <AB> re (?^u:XY) NO match --- str <AB> re (?^u:(X)Y) NO match --- str <AB> re (?^u:) matched, captured () matched, captured () --- str <> re (?^u:..) NO match --- str <> re (?^u:(.)(.)) NO match --- str <> re (?^u:(X)?(.)) NO match --- str <> re (?^u:XY) NO match --- str <> re (?^u:(X)Y) NO match --- str <> re (?^u:) matched, captured () matched, captured ()
Cheers Rolf
(addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
Wikisyntax for the Monastery
In reply to Re^6: How to know that a regexp matched, and get its capture groups?
by LanX
in thread How to know that a regexp matched, and get its capture groups?
by Anonymous Monk
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |