क्यों इस पर्ल में है:पर्ल सबस्ट्रेट (STRING, @ARRAY) ne substr (STRING, OFFSET, LENGTH)?
@x=(0,2);
substr('abcd',@x)
"cd" के रूप में मूल्यांकन?
और यह:
substr('abcd',0,2);
के रूप में "ab" का मूल्यांकन?
क्यों इस पर्ल में है:पर्ल सबस्ट्रेट (STRING, @ARRAY) ne substr (STRING, OFFSET, LENGTH)?
@x=(0,2);
substr('abcd',@x)
"cd" के रूप में मूल्यांकन?
और यह:
substr('abcd',0,2);
के रूप में "ab" का मूल्यांकन?
अदिश संदर्भ में पहले का उपयोग करता @x
... की @x
तो substr('abcd',2)
देता cd
आकार अर्थ।
substr के रूप में एक प्रोटोटाइप एक अंतर्निहित समारोह में है, इसलिए @x का विस्तार नहीं कर रहा है एक अदिश संदर्भ है, जो 2 रिटर्न में मूल्यांकन किया जाता है, तो मूल रूप से आप substr बुला रहे हैं ('एबीसीडी', अदिश (@x))
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)
+1 मैं कुछ नया सीखा है; प्रकाश तेजी से जवाब के लिए) – Sorin
धन्यवाद – user1087245