in reply to Named captures or positional variables

It depends a lot on your situation.

If you need to support Perl older than 5.10, then named captures are out. Full stop.

If you're in a tight loop, using positional variables, or assigning the result of the regexp match to a list of variables, will be faster than named captures which use a tied hash.

In the case where you're passing around regexps as part of an API, then named captures seem the best idea. For example, you have a function which accepts a filehandle and a regexp, and does some processing on the file, using the regexp to extract the right data.

sub process_file { my ($fh, $re) = @_; while (<$fh>) { next unless /$re/; # do stuff with captured data } }

Here named captures make a lot more sense because they give the caller a lot more flexibility. If you have something like:

my $account_number = $1; my $deposit_amount = $2;

... then it ties the input format so that the deposit amount can never be in the first column, before the account number. Named captures don't suffer from that.