Not sure if this makes things easier for you or not, but you could make use of Quantum::Superpositions:
#! /usr/bin/perl -w
use strict;
use Quantum::Superpositions;
my @filter = (
any( qw/ aa ab / ),
any( qw/ bb bc bd / ),
any( qw/ cc cd / ),
any( qw/ dd de df / )
);
my @tests = (
'aa_bb123_cd_de',
'bc_bb_bd_be32',
'ab3_bc_cc45_df',
'aa12_aa34_aa56_aa78'
);
for my $testcase ( @tests ) {
if ( $testcase =~
/(\w{2})\d*_(\w{2})\d*_(\w{2})\d*_(\w{2})\d*/ ) {
# Meets the form; does it pass the filter?
if ( $1 eq $filter[0] && $2 eq $filter[1] &&
$3 eq $filter[2] && $4 eq $filter[3] ) {
print "PASS: $testcase$/";
} else {
print "FAIL: $testcase$/";
}
} else {
print "FAIL: $testcase: Incorrect format$/";
}
}
__END__
_______________
DamnDirtyApe
Those who know that they are profound strive for clarity. Those who
would like to seem profound to the crowd strive for obscurity.
--Friedrich Nietzsche