3

我想问是否有办法做到以下几点。

  1. 在一个名为 CONST 的组中有一堆常量,
  2. 输入一个变量数组,在这种情况下,让我们说数组 ARRAY 中的 3 个变量,
  3. 使用say遍历所有3个变量以检查它们是否属于CONST:

foreach 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
    }
}
4

3 回答 3

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
于 2013-09-06T02:28:33.437 回答
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
于 2013-09-06T02:24:13.520 回答
2

在 Perl v5.18 出现之前,他们将智能匹配重新分类为实验性功能,我会说使用智能匹配

foreach my $var(@ARRAY){
    if (lc($var) ~~ [ CONST ]) {
     #do something
    }
}

但现在我想说听 toolic 和friedo。

于 2013-09-06T03:49:48.803 回答