2010-01-24 7 views
22

पर्ल में my ($variableName) और my $variableName के बीच क्या अंतर है? कोष्ठक क्या करते हैं?

my ($a) = @b; # assigns $a = $b[0] 
my $a = @b;  # assigns $a = scalar @b (length of @b) 

अन्य समय यह महत्वपूर्ण है जब आप एकाधिक चर घोषित:

+1

दिलचस्प पर्ल भिक्षुओं का जवाब [यहां] (http://www.perlmonks.org/?node_id=693666) जो आखिरकार घोषणाओं में असाइनमेंट-असाइनमेंट में माता-पिता के उपयोग को असीमित ऑपरेशन प्राथमिकता के आसपास समाप्त होने के रूप में उबालता है। – ruffin

+0

पूर्ण, विस्तृत उत्तर यहां: [मिनी-ट्यूटोरियल: स्केलर बनाम सूची असाइनमेंट ऑपरेटर] (http://www.perlmonks.org/?node_id=790129)। – ikegami

उत्तर

19

महत्वपूर्ण प्रभाव होता है जब आप एक ही समय है कि आप इसे की घोषणा पर चर आरंभ कर देगा।

my ($a,$b,$c); # correct, all variables are lexically scoped now 
my $a,$b,$c; # $a is now lexically scoped, but $b and $c are not 

अंतिम विवरण आपको use strict पर एक त्रुटि देगा।

+10

तो संक्षेप में: ब्रैकेट्स 1. सूची संदर्भ प्रदान करते हैं, और 2. ऑपरेटर या फ़ंक्शन को कई मानों में वितरित करते हैं। – Ether

+2

# 2 तकनीकी रूप से गलत और संभावित रूप से भ्रामक है। यह गलत है कि माता-पिता के साथ घोषणा की तरह एक व्याख्यात्मक स्केलर की बजाय एक व्याख्यात्मक सूची को परिभाषित करना है। यह भ्रामक है कि एक शुरुआतकर्ता "ब्रैकेट्स ... ऑपरेटर या फ़ंक्शन को कई मानों में वितरित कर सकता है" और उम्मीद कर सकता है कि '($ x, $ y) = (1, 2) + 3' मान 4 को ' "एकाधिक मानों में + ऑपरेटर को वितरित करके" $ x' और 5 से 'y y'"। (वास्तविकता में, वह कथन 5 से '$ x' और' y y' के लिए कुछ भी निर्दिष्ट करता है।) –

+3

# 1 या तो बिल्कुल सही नहीं है। असाइनमेंट के लेफ्टथैंड पक्ष पर अभिभावक सूची संदर्भ प्रदान करते हैं, लेकिन इसका मतलब यह नहीं है कि वे हर जगह सूची संदर्भ प्रदान करते हैं। –

4

my ऑपरेटर पर अधिक जानकारी के लिए कृपया perdoc perlsub पर देखें।

सार:

my $foo;   # declare $foo lexically local 
    my (@wid, %get); # declare list of variables local 
    my $foo = "flurp"; # declare $foo lexical, and init it 
    my @oof = @bar;  # declare @oof lexical, and init it 
    my $x : Foo = $y; # similar, with an attribute applied 
1

कोष्ठक के अन्य जवाब और टिप्पणियों को स्पष्ट उपयोग के रूप में चर करने के लिए सूची संदर्भ प्रदान यहां एक छोटा अंश है। नीचे एक कोड स्निपेट है जो पर्ल फ़ंक्शन split का उपयोग करके कुछ और स्पष्टीकरण प्रदान करता है।

use strict; 

my $input = "one:two:three:four"; 

# split called in list context 
my ($out) = split(/:/,$input); 
# $out contains string 'one' 
#(zeroth element of the list created by split operation) 
print $out,"\n"; 

# split called in scalar context 
my $new_out = split(/:/,$input); 
# $new_out contains 4 (number of fields found) 
print $new_out,"\n"; 

4

संक्षिप्त उत्तर है कि कोष्ठकों बल सूची संदर्भ जब एक = की बाईं ओर का इस्तेमाल किया है।

प्रत्येक अन्य उत्तर एक विशिष्ट मामले को इंगित करता है जहां इससे कोई फर्क पड़ता है। वास्तव में, आपको perlfunc के माध्यम से स्केलर संदर्भ के विपरीत सूची संदर्भ में बुलाए जाने पर फ़ंक्शन कैसे अलग-अलग कार्य करने के बारे में बेहतर विचार प्राप्त करने के लिए पढ़ना चाहिए।

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