2012-01-23 14 views
5

मैंकैसे कर सकते हैं पर्ल निरंतर के माध्यम से लूप

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

नीचे के रूप में भी ऐसा ही करना चाहते हैं लेकिन

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

मैं ऐसा कैसे कर सकते हैं का उपयोग कर?

+2

'निरंतर उपयोग' यहां के लायक होने की तुलना में अधिक परेशानी है। क्यों न सिर्फ हमारे @NUCLEOTIDES = qw (ए सी जी टी); ' ?? – runrig

+0

क्योंकि इस निरंतर जानकारी को रन-टाइम के माध्यम से संशोधित नहीं किया जा रहा है, भले ही यह वास्तव में 'निरंतर' नहीं है। –

+1

फिर इसे संशोधित न करें। – runrig

उत्तर

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

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

हालांकि सावधान रहना: हालांकि न्यूक्लियोटाइड एक निरंतर है, संदर्भित सरणी (जैसे NUCLEOTIDES->[0]) के तत्वों अभी भी संशोधित किया जा सकता।

+0

Thx बहुत, यह वास्तव में सहायक है। –

+0

उत्तर स्वीकार करने के लिए मत भूलना। – dave

1
my $nucleotides = NUCLEOTIDES; 

foreach (@$nucleotides) { 
} 

या आप इस उपयोगिता समारोह बना सकता है: (@) { वापसी @_ == 1 & & रेफरी ($ [0]) eq 'ARRAY' में

उप? @ {शिफ्ट()} : @ ; }

और फिर इस तरह इसे कहते:

for my $n (in NUCLEOTIDES) { 
} 
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]; 

आप भी अक्सर अलग-अलग तत्वों का उपयोग करने की आवश्यकता है।

+0

आप पहले फंक्शन का उपयोग निरंतर NUCLEOTIDES => qw/ए सी जी टी/'के बराबर है। –

2

आप निरंतर pragma का उपयोग करना चाहते हैं, तो आप सिर्फ यह कह सकते हैं

#!/usr/bin/perl 

use strict; 
use warnings; 

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

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

आइटम वसा अल्पविराम (=>) के अधिकार पर एक अदिश मूल्य होने की जरूरत नहीं है।

संबंधित मुद्दे