2012-01-26 6 views

उत्तर

4

अदिश संदर्भ में पहले का उपयोग करता @x ... की @x तो substr('abcd',2) देता cd आकार अर्थ।

5

substr के रूप में एक प्रोटोटाइप एक अंतर्निहित समारोह में है, इसलिए @x का विस्तार नहीं कर रहा है एक अदिश संदर्भ है, जो 2 रिटर्न में मूल्यांकन किया जाता है, तो मूल रूप से आप substr बुला रहे हैं ('एबीसीडी', अदिश (@x))

12

substr ऑपरेटर के दस्तावेज वाक्य रचना

substr EXPR,OFFSET,LENGTH,REPLACEMENT 
substr EXPR,OFFSET,LENGTH 
substr EXPR,OFFSET 
नहीं

substr EXPR,ARRAY 

या अधिक सामान्य है

substr EXPR,LIST 

यह prototype के उत्पादन में प्रतिबिंबित होता है (हालांकि आप हमेशा इस पर भरोसा नहीं कर सकते हैं)।

$ perl -E'say prototype "CORE::substr"' 
$$;$$ 
  • substr के 1 तर्क अदिश संदर्भ में मूल्यांकन किया जाता है।
  • substr का दूसरा तर्क स्केलर संदर्भ में मूल्यांकन किया जाता है।
  • substr का तीसरा तर्क (वैकल्पिक) स्केलर संदर्भ में मूल्यांकन किया जाता है।
  • substr का चौथा तर्क (वैकल्पिक) स्केलर संदर्भ में मूल्यांकन किया जाता है।

@x स्केलर संदर्भ में इसमें तत्वों की संख्या है (2 इस मामले में)।

आप प्राप्त कर सकते हैं कि आप क्या करना चाहते हैं का उपयोग कर निम्न:

sub mysubstr { 
    if (@_ == 2) { substr($_[0], $_[1]) } 
    elsif (@_ == 3) { substr($_[0], $_[1], $_[2]) } 
    elsif (@_ == 4) { substr($_[0], $_[1], $_[2], $_[3]) } 
    else { die } 
} 

my @x = (0, 2); 
mysubstr('abcd',@x) 
+0

+1 मैं कुछ नया सीखा है; प्रकाश तेजी से जवाब के लिए) – Sorin

+0

धन्यवाद – user1087245

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