use warnings; use strict; use Data::Dump; my $s = "a aa aaa aaaa"; $s =~ /(?a+) (?a+) (?:(?a+)bbb)?/; dd \%+; dd \%{^CAPTURE}; dd \%-; dd \%{^CAPTURE_ALL}; tie my %hash, "Tie::Hash::NamedCapture", all => 1; dd \%hash __END__ { # tied Tie::Hash::NamedCapture a => "a", } { # tied Tie::Hash::NamedCapture a => "a", } { # tied Tie::Hash::NamedCapture a => ["a", "aa", undef], } { # tied Tie::Hash::NamedCapture a => "a", } { # tied Tie::Hash::NamedCapture a => ["a", "aa", undef], } #### case '\003': /* $^CHILD_ERROR_NATIVE */ if (memEQs(name, len, "\003HILD_ERROR_NATIVE")) goto magicalize; /* @{^CAPTURE} %{^CAPTURE} */ if (memEQs(name, len, "\003APTURE")) { AV* const av = GvAVn(gv); const Size_t n = *name; sv_magic(MUTABLE_SV(av), (SV*)n, PERL_MAGIC_regdata, NULL, 0); SvREADONLY_on(av); if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) require_tie_mod_s(gv, '-', "Tie::Hash::NamedCapture",0); } else /* %{^CAPTURE_ALL} */ if (memEQs(name, len, "\003APTURE_ALL")) { if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) require_tie_mod_s(gv, '+', "Tie::Hash::NamedCapture",0); } break;