2012-02-13 17 views
8

मुझे लगता है कि कोड के निम्न तीन पंक्तियों $ मूल्य में स्ट्रिंग निकालने और $ हेडर में स्टोर करने के लिए उद्देश्य पता है। लेकिन मुझे नहीं पता कि $value =~ s/^\s+//; और $value =~ s/\s+$//; के बीच अंतर क्या हैं।

$value =~ s/^\s+//; 
$value =~ s/\s+$//; 
$header[$i]= $value; 
+0

"मुझे पता है कि कोड के निम्न तीन पंक्तियों $ मूल्य में स्ट्रिंग निकालने और $ हेडर में स्टोर करने के लिए उद्देश्य" ... बस रिकार्ड के लिए, वे नहीं है। वे स्केलर $ मूल्य के सिरों से व्हाइटस्पेस को पट्टी करना चाहते हैं और इसे सरणी @header के $ i-th तत्व में रखें। – AmbroseChapel

उत्तर

10

perldoc perlfaq4 से:

कैसे मैं एक स्ट्रिंग की शुरुआत/अंत से रिक्त स्थान पट्टी करते हैं?

एक प्रतिस्थापन आप के लिए ऐसा कर सकते हैं। एक पंक्ति के लिए, आप सभी प्रमुख या पीछे वाले व्हाइटस्पेस को कुछ भी नहीं बदलना चाहते हैं।

s/^\s+//; 
s/\s+$//; 

तुम भी है कि लिख सकते हैं एक भी प्रतिस्थापन के रूप में है, हालांकि यह बदल जाता है बाहर संयुक्त बयान अलग लोगों की तुलना में धीमी है: आप कि खिलाड़ी को बदलने की एक जोड़ी के साथ कर सकते हैं। यही कारण है कि , आपके लिए महत्वपूर्ण हो सकता है नहीं है, हालांकि:

s/^\s+|\s+$//g; 

इस नियमित अभिव्यक्ति में, प्रत्यावर्तन शुरुआत या स्ट्रिंग के अंत में या तो मेल खाता है के बाद से एंकर प्रत्यावर्तन की तुलना में कम पूर्वता है। /g ध्वज के साथ, प्रतिस्थापन सभी संभावित मिलान करता है, तो यह दोनों हो जाता है। याद रखें, अनुगामी न्यू लाइन \s+ से मेल खाता है, और इसलिए न्यू लाइन भी गायब हो जाता है $ लंगर, स्ट्रिंग के निरपेक्ष अंत तक मेल कर सकते हैं।


और perldoc perlrequick से:

निर्दिष्ट करने के लिए जहां यह मैच चाहिए, हम लंगर अक्षरों से परे ^ और $ का प्रयोग करेंगे। लंगर ^ स्ट्रिंग के शुरुआत में मिलान का मतलब और लंगर $ के अंत में स्ट्रिंग मिलान का मतलब, या स्ट्रिंग के अंत में एक नई पंक्ति से पहले। कुछ उदाहरण:

"housekeeper" =~ /keeper/;   # matches 
"housekeeper" =~ /^keeper/;  # doesn't match 
"housekeeper" =~ /keeper$/;  # matches 
"housekeeper\n" =~ /keeper$/;  # matches 
"housekeeper" =~ /^housekeeper$/; # matches 
1

^साथ शुरू होता है इसका मतलब है, $ साधन इस तार के साथ समाप्त होता है।

+0

आपने '\ z',' '' 'का वर्णन नहीं किया है। स्ट्रिंग के अंत में या $ स्ट्रिंग के अंत में एक नई लाइन से पहले '$' मेल खाता है। – ikegami

1

पहले एक ही पंक्ति के आरंभ में खाली स्थान के स्थान ले लेगा।

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