有没有办法避免使用它进行多重模式检查?
我可以撕掉数组中的所有模式并检查它是否与模式数组中的任何模式匹配吗?请考虑当我有超过 20 个模式字符串时的情况。
if( ($_=~ /.*\.so$/)
|| ($_=~ /.*_mdb\.v$/)
|| ($_=~ /.*daidir/)
|| ($_=~ /\.__solver_cache__/)
|| ($_=~ /csrc/)
|| ($_=~ /csrc\.vmc/)
|| ($_=~ /gensimv/)
){
...
}
如果您可以使用 Perl 版本 5.10,那么有一个非常简单的方法可以做到这一点。
只需使用新的智能匹配(~~) http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail操作员。
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,那么我会使用列表::更多实用工具::任意 http://search.cpan.org/perldoc/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 ){
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)