2010-01-18 10 views
15

मैं बस Can someone tell me how to create an array of directory contents? पर देख रहा था। अनजाने में, फ़ाइल ग्लोब को उत्तर के रूप में पेश किया गया था। मुझे आश्चर्य हुआ कि पोस्ट का उपयोग <*> के बजाय करने की अनुशंसा की गई थी।<foo*> से अधिक ग्लोब ('foo *') के तुलनात्मक फायदे क्या हैं?

मैं <*> का उपयोग करता हूं क्योंकि मैंने बहुत समय पहले सीखा है और कभी इसके बारे में सोचा नहीं है। जो एक अच्छा कारण नहीं है।

ग्लोबिंग के लिए आप क्या वाक्यविन्यास पसंद करते हैं, और क्यों?

+3

मैं इस समुदाय विकी को क्यों बनाया है इस बारे में उत्सुक हूं। यह एक अच्छा सवाल है, विषय पर, और बहुत ही व्यक्तिपरक नहीं है। इसे चिह्नित करने से सीडब्ल्यू जवाब देने के लिए अपने प्रतिष्ठा बनाने में रुचि रखने वाले लोगों के लिए कुछ प्रोत्साहन लेता है। क्या आप दूसरों को प्रश्न को संपादित करने के लिए बार को कम करना चाहते थे? –

+4

आपको सच कहने के लिए, मैं प्रतिनिधि को भी ध्यान में नहीं रखता था। मैंने इसे सीडब्ल्यू बनाया क्योंकि सवाल व्यक्तिपरक है और चुनाव की तरह है। आप क्या करना चाहते हैं? एक सही जवाब के साथ एक प्रश्न के बजाय। मेरी समझ यह है कि इस तरह के प्रश्न सीडब्ल्यू होना चाहिए। मैं गलत हो सकता था, मैं कई विषयों पर अनगिनत बार रहा हूं। – daotoad

+0

एक एकल सही उत्तर? पर्ल में?! !! !! TMTOWTDI! (-: –

उत्तर

12

व्यक्तिगत रूप से, मुझे लगता है कि <> बुरी तरह से अधिभारित है। इसका अर्थ है "एक पुनरावर्तक से पढ़ें" लेकिन यह निर्धारित करने में थोड़ा सा जादू और सूक्ष्मता है कि मेरे स्वाद के लिए किस प्रकार का इटरेटर है। जैसे <$foo> और <$foo{bar}> का मतलब बहुत अलग चीजें हैं, और जादुई नंगे <> का मतलब कुछ अलग है।

मैं glob का उपयोग करना पसंद करता हूं और हैंडल के लिए <> वाक्यविन्यास आरक्षित करता हूं। ऐसा करने से यह पता लगाने के संज्ञानात्मक बोझ को बचाया जाता है कि <> की सामग्री एक हैंडल की बजाय एक पैटर्न है (या कुछ जो हल करता है)। उस ने कहा, यदि आप मानसिक रूप से <> नोटेशन को "पढ़ने" के बजाय "इटरेटर" के साथ जोड़ते हैं तो आप कार्यात्मक वाक्यविन्यास को पसंद कर सकते हैं - कम से कम उन मामलों के लिए जहां आप सूची उत्पन्न करने के बजाय परिणामों पर कदम उठाना चाहते हैं।

10

कि perldoc आप लिंक किए गए वहाँ कोण ब्रैकेट वाक्य रचना के साथ कुछ मुद्दों है कहते हैं:

एक दोहरे-उद्धरण व्याख्या पहले किया जाता है के स्तर पर है, लेकिन आप <$foo> नहीं कह सकता, क्योंकि वह एक अप्रत्यक्ष है फ़ाइल पैराहेड जैसा कि पिछले अनुच्छेद में बताया गया है। (पर्ल के पुराने संस्करणों में, प्रोग्रामर कर्ली कोष्ठक एक फ़ाइल नाम ग्लोब के रूप में व्याख्या मजबूर करने के लिए सम्मिलित होगा:। <${foo}> इन दिनों, यह, glob($foo) के रूप में सीधे आंतरिक समारोह कॉल करने के लिए क्लीनर माना जाता है जो शायद सही है जिस तरह से यह पहली जगह में किया करने के लिए है।)

मैं ज्यादातर File::Find और उसके जैसे लोग अपने आप का उपयोग करें।

+1

आपका बोल्ड टेक्स्ट सिर्फ एक दावा है: किस मामले में, किसने "क्लीनर माना"अन्य पाठ में '<$foo>' के साथ एक संभावित अस्पष्टता का उल्लेख है कि मैंने कभी भी वास्तविक कोड में कोई समस्या नहीं है। क्या यह नोट बताता है कि यह फ़ॉर्म केवल एक मुद्दा है जहां अस्पष्टता होती है या यह ग्लोब के सभी उपयोगों पर लागू होती है? – daotoad

+0

फ़ाइल :: जब आपको एक ग्लोब की आवश्यकता होती है तो खोजें बहुत भारी कर्तव्य है। लेकिन, यह निश्चित रूप से आपकी खुद की रिकर्सिव निर्देशिका चलने कोड लिखने धड़कता है। आप कहते हैं और यह ठीक है, आपके मन में अन्य विशिष्ट मॉड्यूल क्या हैं? – daotoad

+1

@daotoad: 'perlop.pod' के गिट इतिहास के अनुसार, लैरी वॉल द्वारा कम से कम "माना जाता है क्लीनर" (पर्ल 5.002 बीटा 1 के रूप में, "इन दिनों" 1995-11-21 के आसपास)। (और मेरे द्वारा, जो कुछ भी लायक है।) –

2

इन दिनों मैं glob के साथ चिपकता हूं, क्योंकि मुझे कोण ब्रैकेट का उपयोग करने की तुलना में यह अधिक पठनीय और नौसिखिया-अनुकूल (*) लगता है।

(*) perldoc -f glob काम करता है।

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