Named blocks used to be the GOTO answer for this sort of problem, but goto is frowned on because it tends to obscure code flow. Often there are better ways to structure your code so that you don't need an explicit equivalent of goto. One way to do that is to place your nested loops in a sub that is called from the outer loop.
Consider:
#!/usr/bin/perl -w
use strict;
my @kPatterns =
(
['aaaaa', 'bbbbb', 'ccccc', 'ddddd',],
['eeeee', 'fffff', 'ggggg', 'hhhhh',],
['iiiii', 'jjjjj', 'kkkkk', 'lllll',],
);
for my $test ('yyjjjjjxx', 'ddddd') {
my $match = scan($test);
print "Matched $test using $match\n" if $match;
}
sub scan {
my ($test) = @_;
for my $patternList (@kPatterns) {
for my $pattern (@$patternList) {
return $pattern if $test =~ $pattern;
}
}
return ;
}
Prints:
Matched yyjjjjjxx using jjjjj
Matched ddddd using ddddd
Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond