use Data::Dumper; if (my @r = "foo bar baz" =~ /(foo) (bar) (baz)/) { print Dumper \@r } __END__ $VAR1 = [ 'foo', 'bar', 'baz' ]; #### sub get_caps () { my @caps; my $i = 1; while (exists $-{'cap'.$i}) { push @caps, $-{'cap'.$i++}->[0]; } @caps; } use Data::Dumper; if (scalar("foo bar baz" =~ /(?foo) (?bar) (?baz)/)) { my @r = get_caps; print Dumper \@r; } __END__ $VAR1 = [ 'foo', 'bar', 'baz' ];