आप दो अलग-अलग चीजों को भ्रमित कर रहे हैं। बंद पहले, जब my
का उपयोग कर कई चर घोषित करने के लिए, आप कोष्ठक का उपयोग करने की आवश्यकता है:
my $foo, $bar;
काम नहीं करता है, क्योंकि यह दो अलग-अलग बयान माना जाता है:
my $foo;
$bar;
तो तुम को कोष्ठकों की जरूरत है समूह को एक साथ कार्य करने के लिए एक तर्क सूची में तर्कmy
:
my($foo, $bar);
दूसरे, आप क्रम सूची संदर्भ आह्वान करने के लिए में स्पष्ट समूहीकरण है:
$foo, $bar = "a", "b"; # wrong!
तीन अलग-अलग बयानों पर विचार किया जाएगा:
$foo;
$bar = "a";
"b";
लेकिन अगर आप एक सूची में समूह $foo
और $bar
लिए कोष्ठक का उपयोग, असाइनमेंट ऑपरेटर एक सूची संदर्भ का उपयोग करेगा: मजे की बात है, अगर आप आरएचएस कोष्ठकों निकालने के लिए,
($foo, $bar) = ("a", "b");
आप भी अनुभव होगा एक hickup:
($foo, $bar) = "a", "b"; # Useless use of a constant (b) in void context
लेकिन है कि क्योंकि =
ऑपरेटर अल्पविराम ,
, जो आप perlop में देख सकते हैं की तुलना में अधिक पूर्वता है। यदि आप कोशिश करते हैं:
my @array = ("a", "b");
($foo, $bar) = @array;
आपको बिना किसी ब्रांड्स के वांछित व्यवहार प्राप्त होगा।
अब चक्र पूरा करने के लिए, की सुविधा देता है इसके बाद के संस्करण में सूची संदर्भ को हटाने और देखो क्या होता है:
my @array = ("a", "b");
$foo = @array;
print $foo;
यह 2
प्रिंट, क्योंकि सरणी अदिश संदर्भ में मूल्यांकन किया जाता है, और अदिश संदर्भ में सरणियों वापसी उनमें शामिल तत्वों की संख्या। इस मामले में, यह 2
है।
इसलिए, इस तरह के इन उपयोग सूची संदर्भ के रूप में बयान:
my ($foo) = @array; # $foo is set to $array[0], first array element
my ($bar) = ("a", "b", "c"); # $bar is set to "a", first list element
यह अदिश संदर्भ में जो अदिश काम में निहित है अधिभावी का एक तरीका है। तुलना के लिए, इन असाइनमेंट अदिश संदर्भ में कर रहे हैं:
my $foo = @array; # $foo is set to the number of elements in the array
my $bar = ("a", "b", "c"); # $bar is set to "c", last list element
रखरखाव के लिए यह सहायक हो सकता है, अगर यह स्पष्ट है कि एक सूची भविष्य की उम्मीद हो सकती है। मैं सामान्य रूप से इसका उपयोग करता हूं, जबकि मेरा $ arg1 = shift' – Unos
की बजाय 'my ($ arg1) = @ _' जैसे subroutine तर्कों को पढ़ते समय, मैं बस 'my ('। और, एक आइटम की एक सूची टाइप करने के लिए उपयोग किया जाता हूं) अभी भी एक सूची। :) –