我可以将常量分组进行迭代吗?

时间:2013-09-06 02:16:08

标签: perl constants

所以我是perl的新手,我想问一下是否有办法做到以下几点。

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

非常感谢。

3 个答案:

答案 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
    }
}

但是现在我要说听工具和油炸。