如何在Perl中检查多个模式匹配

Aro*_*vit 5 perl pattern-matching

有没有办法可以避免将其用于多种模式检查?

我可以撕掉数组中的所有模式并检查它是否与模式数组中的任何模式匹配?当我有超过20个模式字符串时,请考虑这种情况.

if(  ($_=~ /.*\.so$/)
  || ($_=~ /.*_mdb\.v$/)
  || ($_=~ /.*daidir/)
  || ($_=~ /\.__solver_cache__/)
  || ($_=~ /csrc/)
  || ($_=~ /csrc\.vmc/)
  || ($_=~ /gensimv/)
){
  ...
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*ert 11

如果您可以使用Perl版本5.10,那么有一种非常简单的方法可以做到这一点.只需使用新的智能匹配(~~)运算符即可.

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 ){
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果你不能使用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 ){
  ...
}
Run Code Online (Sandbox Code Playgroud)