Я хочу сделать так же, как показано ниже
my @nucleotides = ('A', 'C', 'G', 'T'); foreach (@nucleotides) { print $_; }
но с использованием
use constant NUCLEOTIDES => ['A', 'C', 'G', 'T'];
Как я могу это сделать?
use constant NUCLEOTIDES => [ qw{ A C G T } ]; foreach (@{+NUCLEOTIDES}) { print; }
Хотя будьте осторожны: хотя NUCLEOTIDES является константой, элементы ссылочного массива (например, NUCLEOTIDES->[0]) все еще могут быть изменены.
NUCLEOTIDES->[0]
Почему бы не сделать свой постоянный возврат списка?
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];
, если вам также часто требуется доступ к отдельным элементам.
Если вы хотите использовать постоянную прагму, тогда вы можете просто сказать
#!/usr/bin/perl use strict; use warnings; use constant NUCLEOTIDES => qw/A C G T/; for my $nucleotide (NUCLEOTIDES) { print "$nucleotide\n"; }
Элемент справа от жирной запятой (=>) не обязательно должен быть скалярным значением.
=>
my $nucleotides = NUCLEOTIDES; foreach ( @$nucleotides ) { }
Или вы можете сделать эту служебную функцию:
sub in (@) {return @_ == 1 && ref ($ [0]) eq 'ARRAY'?@ {shift ()}: @ ;}
А затем назовите это так:
for my $n ( in NUCLEOTIDES ) { }