我想做同样的事情
my @nucleotides = ('A', 'C', 'G', 'T');
foreach (@nucleotides) {
print $_;
}
但使用
use constant NUCLEOTIDES => ['A', 'C', 'G', 'T'];
我该怎么做?
答案 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}) {
}