如何循环perl常量

时间:2012-01-23 13:34:41

标签: arrays perl loops constants

我想做同样的事情

my @nucleotides = ('A', 'C', 'G', 'T');
foreach (@nucleotides) {
    print $_;
}

但使用

use constant NUCLEOTIDES => ['A', 'C', 'G', 'T'];

我该怎么做?

5 个答案:

答案 0 :(得分:17)

use constant NUCLEOTIDES => [ qw{ A C G T } ];

foreach (@{+NUCLEOTIDES}) {
    print;
}

虽然要注意:虽然NUCLEOTIDES是常量,但引用数组的元素(例如NUCLEOTIDES->[0])仍然可以被修改。

答案 1 :(得分:7)

为什么不让你的常量返回一个列表?

sub NUCLEOTIDES () {qw(A C G T)}

print for NUCLEOTIDES;

甚至列表上下文中的列表和标量上下文中的数组引用:

sub NUCLEOTIDES () {wantarray ? qw(A C G T) : [qw(A C G T)]}

print for NUCLEOTIDES;

print NUCLEOTIDES->[2];

如果您还需要经常访问各个元素。

答案 2 :(得分:2)

如果你想使用常量编译指示,那么你可以说

#!/usr/bin/perl

use strict;
use warnings;

use constant NUCLEOTIDES => qw/A C G T/;

for my $nucleotide (NUCLEOTIDES) {
   print "$nucleotide\n";
}

胖逗号(=>)右侧的项目不一定是标量值。

答案 3 :(得分:1)

my $nucleotides = NUCLEOTIDES;

foreach ( @$nucleotides ) { 
}

或者您可以使用此实用程序功能:

sub in(@){        返回@_ == 1&& ref($ [0])eq'ARRAY'? @ {shift()}             :@             ;    }

然后像这样称呼它:

for my $n ( in NUCLEOTIDES ) { 
}

答案 4 :(得分:1)

(这是为了完整性,而https://stackoverflow.com/a/8972542/6607497则更优雅)

尝试了@{NUCLEOTIDES}@{(NUCLEOTIDES)}之类的操作后,我想出了一个未使用的my变量:

foreach (@{my $r = NUCLEOTIDES}) {
}