所以我是perl的新手,我想问一下是否有办法做到以下几点。
1)在名为CONST的组中有一堆常量, 2)输入变量数组,在这种情况下可以说数组ARRAY中有3个变量, 3)使用say:
遍历所有3个变量以检查它们是否属于CONSTforeach my $var(@ARRAY){
if(lc($var) eq CONST){
#do something
}
}
而不是:
foreach my $var(@ARRAY){
if((lc($var) eq const1) or (lc($var) eq const2) or ... or (lc($var) eq constk)){
#do something
}
}
非常感谢。
答案 0 :(得分:4)
您可以将常量存储在哈希中:
use warnings;
use strict;
my @arr = qw(a B c);
my %const = map { $_ => 1 } qw(b d);
for my $var (@arr) {
print "$var\n" if exists $const{lc $var};
}
__END__
B
答案 1 :(得分:2)
如果我理解正确,您只想检查@array
中的每个项目是否都存在于单独的常量列表中。您可以使用grep
执行此操作:
use strict;
use warnings;
use constant CONST => ( 'foo', 'bar', 'baz', 'quux' );
my @array = ( 'narf', 'poit', 'baz', 'fnarf', 'QUux' );
foreach my $item( @array ) {
print "$item is in CONST\n" if grep { $_ eq lc $item } CONST;
}
输出:
baz is in CONST
QUux is in CONST
答案 2 :(得分:2)
在Perl v5.18发布之前,他们将智能匹配重新分类为实验性功能,我会说使用smart match:
foreach my $var(@ARRAY){
if (lc($var) ~~ [ CONST ]) {
#do something
}
}
但是现在我要说听工具和油炸。