Если вы можете использовать Perl версии 5.10, то есть действительно простой способ сделать это.Просто используйте новый оператор smart match (~~) .
use warnings;
use strict;
use 5.10.1;
my @matches = (
qr/.*\.so$/,
qr/.*_mdb\.v$/,
qr/.*daidir/,
qr/\.__solver_cache__/,
qr/csrc/,
qr/csrc\.vmc/,
qr/gensimv/,
);
if( $_ ~~ @matches ){
...
}
Если вы не можете использовать Perl 5.10, я бы использовал List :: MoreUtils :: any.
use warnings;
use strict;
use List::MoreUtils qw'any';
my @matches = (
# same as above
);
my $test = $_; # copy to a named variable
if( any { $test =~ $_ } @matches ){
...
}