पर्ल 5.10 ने given/when
के साथ एक उचित स्विच निर्माण शुरू किया और यह एक शक्तिशाली उपकरण की तरह लगता है।दिए गए/कब के लिए किस प्रकार के स्वच्छ उपयोग के मामले मौजूद हैं?
वर्तमान में, perldoc perlsyn
में कुछ अच्छे उदाहरणों की कमी है।
given (-d "foo/bar/") {
when (1) { ... } # defined is wrong as -d returns '' on a file.
default { ... }
}
या वैकल्पिक रूप से:
एक मामले में जहां मैं इसे आसान पाया हाल ही में फ़ाइल परीक्षण ऑपरेटरों के साथ यह प्रयोग करने के लिए था
given ("foo/bar/") {
when (-d) { ... }
default { ... }
}
मेरे लिए, विशेष रूप से पहला संस्करण एक की तुलना में बेहतर है, तो लग रहा है टेस्टरी ऑपरेटर का निर्माण या उपयोग करते समय, परीक्षण के नतीजे के आधार पर मुझे दोनों मामलों में कार्रवाई करने की आवश्यकता होती है।
यह मुझे आश्चर्यचकित कर देता है, हालांकि स्मार्ट मिलान से वापस आने के सामान्य मामले से परे और साफ-सुथरा दिखता है और अगर-एलीफ-एल्सिफ़ -..-अन्य संरचनाओं से परहेज करते हैं?
मेरे पास एक झुकाव है जो स्पष्टता खोने के बिना चालाक होने के लिए दिया जाता है/लेकिन मेरे पास कोई अच्छा उदाहरण नहीं है।
given ($filename) {
when (-e) {
when (-f) {
when (-z) { say "Empty file" }
default { say "Nonempty file" }
}
when (-d) {
when (-o) { say "Directory owned by me"}
default { say "Directory owned by someone else" }
}
default { say "Special" }
}
default { say "No such file or directory" } }
आप 'stat' कॉल करने से बचने के लिए '-f _',' -z _', '-d _', और' -o _' का उपयोग करना चाह सकते हैं एक ही फाइल '-e' इसे बुलाया। अधिक जानकारी के लिए ['perldoc -f -X'] (http://perldoc.perl.org/functions/-X.html) देखें। –
दरअसल, आमतौर पर कैश किए गए फॉर्म का उपयोग करना एक अच्छा विचार है। मैं हालांकि असंबंधित चीजों के साथ उदाहरण को खत्म नहीं करना चाहता था। यह शायद ही कभी प्रदर्शन के लिए महत्वपूर्ण है ... – szbalint
'-d' encompasses '-e' और' -f' encompasses'-e', '-e' का परीक्षण करने का कोई कारण नहीं है जब तक'! -f &&! -d' , यह मानने के लिए कुछ भी नहीं बदलेगा कि उस मामले में, यदि '-e', तो यह विशेष है। – Axeman