चर नामों के रूप में गैर-शब्द वर्णों का उपयोग करें
$%
इसके बजाय का उपयोग करके $a
आप चर नाम को एक के ठीक बगल में रख सकते हैं if
, for
या इसके while
रूप में निर्माण कर सकते हैं:
@r=(1,2,3,4,5);$%=4;
print$_*$%for@r
कई का उपयोग किया जा सकता है, लेकिन डॉक्स और @ ब्रेडबॉक्स के उत्तर की जांच करें जिनके लिए जादू प्रभाव हैं!
जब आप स्टेटमेंट संशोधक का उपयोग नहीं कर सकते हैं तो मैप का उपयोग करें
यदि आप @ जेबी के उत्तर के अनुसार स्टेटमेंट मॉडिफायर का उपयोग नहीं कर सकते हैं , तो नक्शा एक बाइट को बचा सकता है:
for(@c){}
बनाम map{}@c;
और उपयोगी है यदि आप नेस्टेड पुनरावृत्तियों करना चाहते हैं क्योंकि आप के for
अंदर पोस्टफ़िक्स लूप डाल सकते हैं map
।
सभी जादू नियमित अभिव्यक्ति चर का उपयोग करें
पर्ल में 'मैच से पहले टेक्स्ट' और 'मैच के बाद टेक्स्ट' के लिए मैजिक वैरिएबल्स हैं, इसलिए कम से कम दो के साथ दो समूहों में विभाजित करना संभव है:
($x,$y)=split/,/,$_;
($x,$y)=/(.+),(.+)/;
/,/; # $x=$`, $y=$'
# Note: you will need to save the variables if you'll be using more regex matches!
यह भी एक प्रतिस्थापन के रूप में अच्छी तरह से काम कर सकता है substr
:
$s=substr$_,1;
/./;# $s=$'
$s=substr$_,4;
/.{4}/;# $s=$'
यदि आपको मैच की सामग्री की आवश्यकता है, तो $&
इसका उपयोग किया जा सकता है, जैसे:
# assume input like '10 PRINT "Hello, World!"'
($n,$c,$x)=split/ /,$_;
/ .+ /; # $n=$`, $c=$&, $x=$'
एक छोटे नाम के साथ लंबे नामों के साथ उप प्रतिस्थापित करें
यदि आप print
अपने कोड में चार या अधिक बार कहते हैं (यह स्पष्ट रूप से आपके द्वारा कॉल की जा रही दिनचर्या की लंबाई के साथ भिन्न होता है), इसे एक छोटे उप नाम के साथ बदलें:
sub p{print@_}p;p;p;p
बनाम
print;print;print;print
सशर्त इन्क्रीमेंटर्स / डिक्रीमेंटर्स बदलें
यदि आपके पास कोड है:
$i--if$i>0
आप उपयोग कर सकते हैं:
$i-=$i>0
इसके बजाय कुछ बाइट्स बचाने के लिए।
पूर्णांक में परिवर्तित करें
यदि आप एक चर को असाइन नहीं कर रहे हैं और इसलिए ब्रेडबॉक्स की टिप का उपयोग नहीं कर सकते हैं, तो आप अभिव्यक्ति का उपयोग कर सकते हैं 0|
:
rand 25 # random float eg. 19.3560355885212
int rand 25 # random int
0|rand 25 # random int
rand 25|0 # random int
~~rand 25 # random int
हालाँकि यह ध्यान देने योग्य है कि सरणी इंडेक्स तक पहुँचने के लिए आपको पूर्णांक का उपयोग करने की आवश्यकता नहीं है:
@letters = A..Z;
$letters[rand 26]; # random letter
$_=print""
से छोटा है$_=print$foo
।