@_
पर्ल में अर्थ क्या है ?
जवाबों:
perldoc perlvar किसी भी विशेष-नामित पर्ल चर जानकारी की जांच करने वाला पहला स्थान है।
का हवाला देते हुए:
@_
: एक सबरूटीन के भीतर सरणी@_
में उस सबरूटीन को दिए गए पैरामीटर होते हैं।
अधिक विवरण perldoc perlsub (Perl subroutines) में perlvar से जुड़े पाए जा सकते हैं :
किसी भी तर्क सरणी में दिखाने के लिए पारित कर दिया
@_
।इसलिए, यदि आप दो तर्क के साथ एक समारोह कहा जाता है, उन में संग्रहीत किया जाएगा
$_[0]
और$_[1]
।सरणी
@_
एक स्थानीय सरणी है , लेकिन इसके तत्व वास्तविक स्केलर मापदंडों के लिए उपनाम हैं । विशेष रूप से, यदि कोई तत्व $ _ [0] अपडेट किया जाता है, तो संबंधित तर्क अपडेट किया जाता है (या अपडेट योग्य नहीं होने पर कोई त्रुटि उत्पन्न होती है)।यदि एक तर्क एक सरणी या हैश तत्व है जो फ़ंक्शन को कॉल करने पर मौजूद नहीं था, तो वह तत्व केवल तब बनाया जाता है जब (और यदि) इसे संशोधित किया जाता है या इसके लिए एक संदर्भ लिया जाता है। (पर्ल के कुछ पहले के संस्करणों ने तत्व बनाया या नहीं, तत्व को सौंपा गया था।) पूरे सरणी को असाइन करने पर @_ उस एलियासिंग को हटा देता है, और किसी भी तर्क को अपडेट नहीं करता है।
आमतौर पर, आप वैरिएबल का उपयोग करके उप में दिए गए मापदंडों का विस्तार करते हैं @_
:
sub test{
my ($a, $b, $c) = @_;
...
}
# call the test sub with the parameters
test('alice', 'bob', 'charlie');
इस तरह से सही होने का दावा किया है perlcritic ।
perlcritic
, व्यक्तिगत रूप से मुझे लगता है कि यह एक समारोह के लिए सबसे अच्छा है, लेकिन एक विधि के लिए, यह shift
आत्म संदर्भ के लिए उपयोगी है , फिर @_
सरणी को अनपैक करें । इससे यह स्पष्ट होता है कि यह एक विधि है और यह विधि कुछ मापदंडों
खोज के लिएperl @_
पहला हिट यह कहता है :
@_ आने वाले मापदंडों की सूची एक उप है।
इसकी एक लंबी और अधिक विस्तृत व्याख्या भी है।
सवाल था कि पर्ल में क्या @_
मतलब था । इस प्रश्न का उत्तर है कि है, जहां तक $_
साधन यह पर्ल में, @_
इसी तरह का मतलब है वे ।
किसी को भी इसके अर्थ के इस महत्वपूर्ण पहलू का उल्लेख नहीं किया गया है - साथ ही उनका भी ।
वे फलस्वरूप दोनों सर्वनाम के रूप में, या कभी-कभी सामयिक के रूप में उपयोग किए जाते हैं।
उनके पास आमतौर पर नाममात्र एंटीकेडेंट्स होते हैं, हालांकि हमेशा नहीं।
आप ज्यादातर मामलों में व्यक्तिगत चर के लिए बदलाव का उपयोग कर सकते हैं:
$var1 = shift;
यह एक ऐसा विषय है जिसमें आपको आगे शोध करना चाहिए क्योंकि पर्ल में आपकी उप दिनचर्या के अंदर बाहर की जानकारी हासिल करने के कई दिलचस्प तरीके हैं।
भले ही कोई फ़ंक्शन किसी सरणी को लौटाता है, लेकिन फ़ंक्शन को नीचे दिए गए किसी भी चर पर अपना लौटा डेटा निर्दिष्ट किए बिना कहा जाता है। यहां विभाजन () कहा जाता है, लेकिन यह किसी भी चर को नहीं सौंपा गया है। हम इसके डेटा को बाद में @_ के माध्यम से एक्सेस कर सकते हैं:
$str = "Mr.Bond|Chewbaaka|Spider-Man";
split(/\|/, $str);
print @_[0]; # 'Mr.Bond'
यह स्ट्रिंग को विभाजित करेगा $str
और सरणी सेट करेगा @_
।
@
एक सरणी के लिए उपयोग किया जाता है।
एक सबरूटीन में या जब आप पर्ल में किसी फ़ंक्शन को कॉल करते हैं, तो आप पैरामीटर सूची पास कर सकते हैं। उस स्थिति में, @_
फ़ंक्शन को पैरामीटर सूची पास करने के लिए उपयोग किया जा सकता है:
sub Average{
# Get total number of arguments passed.
$n = scalar(@_);
$sum = 0;
foreach $item (@_){
# foreach is like for loop... It will access every
# array element by an iterator
$sum += $item;
}
$average = $sum / $n;
print "Average for the given numbers: $average\n";
}
Average(10, 20, 30);
यदि आप उपरोक्त कोड का निरीक्षण करते हैं, तो foreach $item(@_)
लाइन देखें ... यहां यह इनपुट पैरामीटर पास करता है।
use strict
। इसलिए मैंने आपका उप फ़ंक्शन संपादित किया।
@_ चर को संपादित करने की कोशिश कभी नहीं !!!! उन्हें छुआ नहीं जाना चाहिए .. या आपको कुछ अनसुना प्रभाव मिलता है। उदाहरण के लिए...
my $size=1234;
sub sub1{
$_[0]=500;
}
sub1 $size;
कॉल करने से पहले सब 1 $ आकार में 1234 होते हैं। लेकिन 500 (!!) के बाद आप इस मूल्य को संपादित नहीं करते हैं !!! आप दो या अधिक मान पास कर सकते हैं और उन्हें सबरूटीन में बदल सकते हैं और उन सभी को बदल दिया जाएगा! मैंने इस प्रभाव को कभी देखा नहीं है। जिन कार्यक्रमों को मैंने देखा है, वे @_ सरणी को आसानी से छोड़ देते हैं। और केवल यह कि आप सुरक्षित रूप से परिवर्तनशील हो सकते हैं परिवर्तनशील आंतरिक सबरूटीन नहीं बदला है आपको हमेशा ऐसा करना चाहिए:
sub sub2{
my @m=@_;
....
}
स्थानीय सबरूटीन प्रक्रिया चर के लिए @_ असाइन करें और अगला उनके साथ काम किया। इसके अलावा कुछ गहरी पुनरावर्ती एल्गोरिदम में जो रेटुरुन सरणी है आप इस दृष्टिकोण का उपयोग स्थानीय संस्करणों के लिए उपयोग की जाने वाली स्मृति को कम करने के लिए कर सकते हैं। केवल अगर @_ समान लौटाएं।