2012-01-23 31 views
5

Tôi muốn làm tương tự như dưới đâyLàm thế nào có thể lặp qua perl liên tục

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

nhưng sử dụng

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

Làm thế nào tôi có thể làm điều đó?

+2

'hằng số sử dụng' gặp nhiều rắc rối hơn giá trị ở đây. Tại sao không chỉ '@NUCLEOTIDES = qw (A C G T) của chúng tôi;' ?? – runrig

+0

Bởi vì thông tin trong hằng số này sẽ không bị sửa đổi trong suốt thời gian chạy mặc dù nó không thực sự là 'hằng số' ở đây. –

+1

Sau đó, không sửa đổi nó. – runrig

Trả lời

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

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

Mặc dù hãy cẩn thận: Mặc dù Nucleotides là một hằng số, các yếu tố của mảng tham chiếu (ví dụ NUCLEOTIDES->[0]) vẫn có thể được sửa đổi.

+0

Thx rất nhiều, nó thực sự hữu ích. –

+0

đừng quên chấp nhận câu trả lời. – dave

1
my $nucleotides = NUCLEOTIDES; 

foreach (@$nucleotides) { 
} 

Hoặc bạn có thể thực hiện chức năng tiện ích này:

phụ trong (@) { trở @_ == 1 & & ref ($ [0]) eq 'ARRAY'? @ {shift()} : @ ; }

Và sau đó gọi nó như thế này:

for my $n (in NUCLEOTIDES) { 
} 
7

Tại sao không làm trở lại thường xuyên của bạn một danh sách?

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

print for NUCLEOTIDES; 

hoặc thậm chí là một danh sách trong bối cảnh danh sách và một ref mảng trong bối cảnh vô hướng:

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

print for NUCLEOTIDES; 

print NUCLEOTIDES->[2]; 

nếu bạn cũng cần phải truy cập thường xuyên các yếu tố cá nhân.

+0

Hàm đầu tiên của bạn tương đương với 'hằng số NUCLEOTIDES => qw/A C G T /'. –

2

Nếu bạn muốn sử dụng pragma liên tục, sau đó bạn có thể chỉ nói

#!/usr/bin/perl 

use strict; 
use warnings; 

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

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

Các mục trên bên phải của dấu phẩy chất béo (=>) không phải là một giá trị vô hướng.

Các vấn đề liên quan