这对于smart match来说是一项不错的工作,但是该运算符已被标记为实验性的,并且可能会从 Perl 的更高版本中删除。
List::Util
有any
运营商。但是,要非常小心。这List::Util
是至少从 Perl 5.8.8 开始的标准 Perl 模块。不幸的是,niceany
运算符不包括在内。您需要更新此模块才能使用any
. 但是,first
操作员可能已经足够好,这是软件包的一部分:
use strict;
use warnings;
use feature qw(say);
use autodie;
use List::Util qw(first);
use constant VALID_VALUES => qw(one two three four five);
for my $value ( qw(zero one two three four five six) ) {
if ( first { $value eq $_ } VALID_VALUES ) {
say "$value is in the list!";
}
else {
say "Nope. $value is not";
}
}
既然你use List::Util qw(first);
在你的程序中,用户应该意识到它first
来自List::Util
包,他们可以用perldoc List::Util
它来查找它。
您也可以只使用grep
并忘记List::Util
:
for my $value ( qw(zero one two three four five six) ) {
if ( grep { $value eq $_ } VALID_VALUES ) {
say "$value is in the list!";
}
else {
say "Nope. $value is not";
}
}
您不应该做的是使用复杂的正则表达式或 if/else 链。这些不一定更清楚,并使您的程序更难理解:
if ( $value =~ /^(one|two|three|four|five)$/ ) {
if ( $value eq "one" or $value eq "two" or $value eq "three" ... ) {
如果您决定更改有效的值列表,则必须通过整个程序来搜索它们。这就是为什么我将它们设为常数。程序中只有一处需要修改。