2011-12-13 8 views
5

; को कथन डेलीमीटर के रूप में उपयोग किया जाता है, इसलिए कथन के अंत में एकाधिक ; रखकर ठीक है क्योंकि यह केवल खाली बयान जोड़ता है।स्टेटमेंट के अंत में पर्ल अर्धविराम

मैं इस कोड है जो अंत में कई ; है भर में आया था, लेकिन उनमें त्रुटियों के कारण को हटाने:

$line =~s;[.,]$;;; 

रूप

$line =~s;[.,;]$; 

एक ही होना चाहिए, लेकिन यह नहीं है। क्या चल रहा है?

+2

आपने दूसरे कथन में अर्धविराम निकालने से कहीं अधिक किया, आपने इसके बीच में एक जोड़ा। –

+5

[रों //: "। किसी भी गैर-सफ़ेद सीमांकक स्लैश की जगह ले सकती"] (http://perldoc.perl.org/perlop.html#s%2fPATTERN%2fREPLACEMENT%2fmsixpodualgcer) –

+4

जाहिर है जो कोई भी यह सोचा था कि यह था लिखा था उच्च मनोरंजन मूल्य – Zaid

उत्तर

7

अपने कोड में के बराबर है। अन्य regex delimiters हैं जो प्रतिस्थापन ऑपरेटर लेता है। एक बेहतर तरीका यह लिखने के लिए:

$line =~s/[.,]$//; 

जब से तुम बयान सीमांकक और अपने बयान में regex सीमांकक होना आवश्यक है, तो आप पीछे चल ;

13

आपके द्वारा प्रदत्त स्निपेट में ; को नियमित अभिव्यक्ति की खोज-एन-प्रतिस्थापन के लिए एक डिलीमीटर के रूप में उपयोग किया जाता है।

$line =~s;[.,]$;;; 

केवल पिछले ;बयान सीमांकक है

$line =~ s/[.,]$//; 
+4

बस स्पष्ट होना - हाँ, यह करने के लिए कानूनी है। नहीं, आप कभी भी उस अपने कोड में जब तक आप में अपने सिर पार्टी की योजना बनाई एक रेविंग मनोरोगी चाहते कभी नहीं करना चाहिए। और मनोरोगी दीवाना द्वारा मैं अगले डेवलपर हैं जो अपने कोड बनाए रखने के लिए है मतलब है। – DVK

3

के किसी भी नहीं छोड़ सकते हैं एक अर्धविराम सार्वभौमिक एक बयान नहीं है विभाजक; यह एक उद्धृत स्ट्रिंग या रेगेक्स डेलीमीटर भी हो सकता है। या यहां तक ​​कि एक वैरिएबल नाम, जैसा कि इस क्लासिक जेएपीएच द्वारा अबीगैल द्वारा लिखा गया है, "चीजें वे जैसी नहीं हैं।"

$;        # A lone dollar? 
=$";       # Pod? 
$;        # The return of the lone dollar? 
{Just=>another=>Perl=>Hacker=>} # Bare block? 
=$/;       # More pod? 
print%;       # No right operand for %? 
संबंधित मुद्दे