Named blocks should be what you want (code is lightly tested). Generally shouldn’t use single letter var names, even for dummy code and $a and $b should really never be used outside sorting where they have special meaning.
use strict;
use warnings;
my @x = ( ['aaaaa', 'bbbbb', 'ccccc', 'ddddd',],
['eeeee', 'fffff', 'ggggg', 'hhhhh',],
['iiiii', 'jjjjj', 'kkkkk', 'lllll',], );
my $tolerance = 1;
STEVE:
for my $outer ( 1 .. 5 )
{
TONY:
for my $some_x ( @x )
{
my $fail = 0;
BRUCE:
for my $just_this ( @{$some_x} )
{
my $c = "..."; # ... get string for pattern matching here.
$fail++ if $c =~ /\Q$just_this/;
next STEVE if $fail > $tolerance;
}
}
}
Update: In anything but straightforward, single-screen-of-code cases, I agree with GrandFather below.