2017-03-24 10 views
5

मुझे आश्चर्य है कि \sort ... रिटर्न।मैं ` sort ... 'का उपयोग कैसे कर सकता हूं?

निम्न पंक्ति

my $y = \sort qw(one two three four five); 

$y को क्रियान्वित करने के बाद एक अदिश लिए एक संदर्भ है। मुझे वास्तव में एक सरणी के संदर्भ की उम्मीद थी: क्रमबद्ध तत्वों के साथ सरणी (पांच, चार, एक, तीन, दो)। $y (उदाहरण के लिए print $$y) को संदर्भित करते समय, मुझे क्रमबद्ध सूची का अंतिम तत्व two मिलता है।

क्या \sort(...) के साथ कोई उपयोगी चीज़ है?

+0

देखें [perldata] (https://perldoc.perl.org/perldata.html#List-value-constructors): '$ foo = ('cc', '-E', $ bar)' मान निर्दिष्ट करता है स्केलर वैरिएबल '$ foo' –

+2

' my $ y = [sort ...] ', ओटीओएच, परिवर्तनीय '$ bar' के लिए कुछ और अधिक उपयोगी प्रदान करता है। – ikegami

+0

@ikegami, जैसा होता है ... यह वही है जो मैं पहले स्थान पर चाहता था ... –

उत्तर

4

sort एक सूची देता है।

\LIST (जैसे \($x,$y,42)) मूल सूची (\$x,\$y,\42) की मूल सूची के प्रत्येक संदर्भ के संदर्भ में एक और सूची उत्पन्न करता है।

तो \sort ... एक क्रमबद्ध सूची के तत्वों के संदर्भ देता है।

अब स्केलर संदर्भ में, $foo = LIST सूची का अंतिम तत्व असाइन करता है। लाना इस कुल मिलाकर,

my $y = \sort qw(one two three four five); 

एक

print $$y;  # "two" 

$y करने के लिए पिछले क्रमबद्ध तत्व के संदर्भ में, या मैं इस सुविधा के लिए किसी भी अच्छा उपयोग के मामलों की सोच भी नहीं सकता प्रदान करती है, लेकिन वह बहुत अच्छा नहीं है सबूत है कि कोई अस्तित्व में नहीं है।

5

perldata के अनुसार मूल्यों की सूची में स्केलर असाइन करना, सूची के अंतिम मूल्य को स्केलर को असाइन करता है। तो

$foo = ('cc', '-E', $bar); 

अदिश चर $foo चर $bar का मूल्य प्रदान करती है।

perlref के अनुसार, एक गणित सूची का संदर्भ लेना संदर्भों की एक सूची बनाने जैसा ही है। इसलिए,

my $y = \sort qw(one two three four five); 

my $y = \(sort qw(one two three four five)); 

जो

my $y = \(sort qw(one two three four five))[-1]; 

जो क्रमबद्ध सूची का अंतिम मान के लिए एक संदर्भ दे देंगे के बराबर है, अदिश मूल्य "दो यानी के बराबर है "।

+0

@ThisSuitIsBlackNot यह सूची संदर्भ नहीं है तो \ \ (sort ...) '? –

+1

माता-पिता कुछ भी नहीं बदलते हैं। मैंने अपनी टिप्पणी हटा दी क्योंकि मुझे एहसास हुआ कि '' \ '' सूची संदर्भ में अपने ऑपरेंड का मूल्यांकन करता है: 'perl -MO = संक्षिप्त- '\ sort'' – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot क्या आपको पता है कि' \\' (बैकस्लैश) दस्तावेज़ का यह व्यवहार कहीं भी? –

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