2011-11-15 13 views
5

सीपीएएन ब्राउज़ करते समय, मैं this module में कोड के एक ब्लॉक में आया जो मुझे रोक दिया।पर्ल में "डू {} अगर ब्लॉक" का उपयोग क्यों करें?

sub import { 
    for my $mod (keys %INC) { 
    do { 
     delete $INC{$mod}; 
     $mod =~ s/\.pm$//; $mod =~ s/\//::/g; 
     delete_package($mod); 
    } if $mod =~ m/^SOAP/; 
    } 
} 

क्यों लेखक एक do {} if ब्लॉक के बजाय एक नियमित रूप से if ब्लॉक के प्रयोग करेंगे?

+6

Acme नामस्थान। आप सैनिटी की उम्मीद क्यों कर रहे हैं? :) – Hugmeir

+4

मैं व्यक्तिगत रूप से 'मेरे $ mod (कुंजी% INC) के लिए {अगली अगर $ mod! ~/^ SOAP /; ...} '। लूप अप फ्रंट के लिए मानदंड निर्दिष्ट करता है, और बोनस के रूप में इंडेंट के स्तर से बचाता है। – ikegami

+0

@ हूगीर हाहा - यह एक बिल्कुल वैध जवाब है, आपको इसे प्रस्तुत करना चाहिए :) –

उत्तर

4

क्योंकि उन्हें ऐसा लगता है। कोई वास्तविक अंतर नहीं है। पर्ल को सब कुछ करने के लिए एक दर्जन तरीके पसंद हैं। यह भाषा ही है।

+1

+1 मुझे हमेशा "क्यों नहीं?" सुनना अच्छा लगता है। – fncomp

1

क्योंकि पर्ल में "वहाँ एक से अधिक तरीका यह करना है"

2

मेरे लिए, यह एक तरह से जैसे अंदर if हालत से भी if अधिक कोड पर जोर रहा है।

2

लेखक अंत में उपयोग करना चाहता था, लेकिन इसे एक कथन के अंत में होना चाहिए। एक do {} एक कथन है, इसलिए यह काम करेगा।

व्यक्तिगत रूप से, मैं एक कथन का उपयोग करता हूं, लेकिन यह स्वाद का विषय है कि कार्रवाई या स्थिति पर जोर होना चाहिए या नहीं। इस मामले में लेखक ने कार्रवाई पर जोर देना चुना।

my $x = 3; 
my $z = do { warn "in the do block"; 10 } if $x == 3; 

आप लगभग एक ही बात त्रिगुट के साथ पूरा कर सकते हैं:

+0

(+1) मुझे यह लिखने में बहुत भ्रमित लगता है कि "कुछ और करें अगर कुछ और करें", जैसे कि "मैं घर पर रहता हूं ** ** हर दिन ** (जब तक कि यह एक कार्य दिवस न हो) _" – Gonen

5

एक अंतर यह है कि do { ... } एक जबकि एक मान देता है अगर बयान नहीं (। नीचे टिप्पणी देखते हैं, हालांकि)

उदा करता है ऑपरेटर, हालांकि आप टर्नरी ऑपरेटर की शाखाओं के अंदर बयान अनुक्रमित नहीं कर सकते हैं।

+2

यदि बयान भी वापस आते हैं मान। सिंटैक्स थोड़ा मुश्किल होने के कारण आप उन्हें सीधे असाइन नहीं कर सकते हैं। लेकिन अगर आप इसे सही तरीके से एम्बेड करते हैं, तो आप देख सकते हैं कि यदि कोई मान वापस आ रहा है। यहां कोड का समतुल्य टुकड़ा है: 'मेरा $ z = do {if ($ x == 3) {ब्लॉक" में चेतावनी दें "; 10}}' आपका कोड अधिक संक्षिप्त है, हालांकि, मुझे अभी भी लगता है कि यह अभी भी है एक उचित उत्तर, पूरी तरह से तकनीकी रूप से सही नहीं है। –

+0

मैं सहमत हूं - यह स्थिति को देखने का एक और सही तरीका है। – ErikR

+0

उन दो उदाहरण पर्ल के समान हैं .... –

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