पर्ल में my ($variableName)
और my $variableName
के बीच क्या अंतर है? कोष्ठक क्या करते हैं?
my ($a) = @b; # assigns $a = $b[0]
my $a = @b; # assigns $a = scalar @b (length of @b)
अन्य समय यह महत्वपूर्ण है जब आप एकाधिक चर घोषित:
पर्ल में my ($variableName)
और my $variableName
के बीच क्या अंतर है? कोष्ठक क्या करते हैं?
my ($a) = @b; # assigns $a = $b[0]
my $a = @b; # assigns $a = scalar @b (length of @b)
अन्य समय यह महत्वपूर्ण है जब आप एकाधिक चर घोषित:
महत्वपूर्ण प्रभाव होता है जब आप एक ही समय है कि आप इसे की घोषणा पर चर आरंभ कर देगा।
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
पर एक त्रुटि देगा।
तो संक्षेप में: ब्रैकेट्स 1. सूची संदर्भ प्रदान करते हैं, और 2. ऑपरेटर या फ़ंक्शन को कई मानों में वितरित करते हैं। – Ether
# 2 तकनीकी रूप से गलत और संभावित रूप से भ्रामक है। यह गलत है कि माता-पिता के साथ घोषणा की तरह एक व्याख्यात्मक स्केलर की बजाय एक व्याख्यात्मक सूची को परिभाषित करना है। यह भ्रामक है कि एक शुरुआतकर्ता "ब्रैकेट्स ... ऑपरेटर या फ़ंक्शन को कई मानों में वितरित कर सकता है" और उम्मीद कर सकता है कि '($ x, $ y) = (1, 2) + 3' मान 4 को ' "एकाधिक मानों में + ऑपरेटर को वितरित करके" $ x' और 5 से 'y y'"। (वास्तविकता में, वह कथन 5 से '$ x' और' y y' के लिए कुछ भी निर्दिष्ट करता है।) –
# 1 या तो बिल्कुल सही नहीं है। असाइनमेंट के लेफ्टथैंड पक्ष पर अभिभावक सूची संदर्भ प्रदान करते हैं, लेकिन इसका मतलब यह नहीं है कि वे हर जगह सूची संदर्भ प्रदान करते हैं। –
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
कोष्ठक के अन्य जवाब और टिप्पणियों को स्पष्ट उपयोग के रूप में चर करने के लिए सूची संदर्भ प्रदान यहां एक छोटा अंश है। नीचे एक कोड स्निपेट है जो पर्ल फ़ंक्शन 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";
संक्षिप्त उत्तर है कि कोष्ठकों बल सूची संदर्भ जब एक =
की बाईं ओर का इस्तेमाल किया है।
प्रत्येक अन्य उत्तर एक विशिष्ट मामले को इंगित करता है जहां इससे कोई फर्क पड़ता है। वास्तव में, आपको perlfunc के माध्यम से स्केलर संदर्भ के विपरीत सूची संदर्भ में बुलाए जाने पर फ़ंक्शन कैसे अलग-अलग कार्य करने के बारे में बेहतर विचार प्राप्त करने के लिए पढ़ना चाहिए।
दिलचस्प पर्ल भिक्षुओं का जवाब [यहां] (http://www.perlmonks.org/?node_id=693666) जो आखिरकार घोषणाओं में असाइनमेंट-असाइनमेंट में माता-पिता के उपयोग को असीमित ऑपरेशन प्राथमिकता के आसपास समाप्त होने के रूप में उबालता है। – ruffin
पूर्ण, विस्तृत उत्तर यहां: [मिनी-ट्यूटोरियल: स्केलर बनाम सूची असाइनमेंट ऑपरेटर] (http://www.perlmonks.org/?node_id=790129)। – ikegami