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], }