use Regexp::NamedCaptures; use re 'eval'; my $s = 'blah bbbbbbbb baz'; my $foo; my $q = Regexp::NamedCaptures::convert('blah (?<$foo>\w+) (\w+)(?:\s+(\w+))'); print $q,"\n"; my @x = $s =~ qr/$q/; print "foo = $foo\n\@x = ", join(', ',map { "[$_]" } @x), "\n";