2012-08-06 10 views
8
while(<@thisArray>) 

क्या कोई जानता है कि यह वास्तव में क्या करेगा?जबकि (<@array>) perl

glob(@thisArray) रूप
while(<STDIN>) 
+0

यह कुछ भी नहीं करना चाहिए, क्योंकि '@ array' फ़ाइलहेडल नाम नहीं है, यह एक सरणी का नाम है। – SexyBeast

उत्तर

6

<@thisArray> काम करता है: के रूप में यह कोड आमतौर पर की तरह कुछ है हम सिर्फ इस पर एक चर्चा कर रहे थे। तो यह सरणी के सदस्यों से मेल खाने वाली सभी फाइलों की एक सूची देता है।

यदि सरणी का कोई तत्व किसी फ़ाइल से मेल नहीं खाता है, तो तत्व स्वयं लौटा दिया जाता है।

10

यह @thisArray में पैटर्न से मेल खाने वाली फाइलों के नामों के माध्यम से पुनरावृत्त होगा।

perl -MO=Deparse -e '1 while(<@thisArray>)' के परिणाम से पता चलता है कि <>glob में बदल जाती है: इस तरह के फ़ाइल नाम विस्तार के माध्यम से

अदिश संदर्भ में, ग्लोब दोहराता, undef लौटने जब सूची समाप्त हो रहा है:

use File::Glob(); 
'???' while defined($_ = glob(join($", @thisArray))); 

glob पुस्तिका से । $" के लिए

डिफ़ॉल्ट मूल्य, जगह नहीं है इसलिए @thisArray से कई पैटर्न एकल स्ट्रिंग में शामिल किया जाएगा और उसके बाद glob अंदर वापस अंतरिक्ष से splitted:

ध्यान दें कि ग्लोब खाली स्थान के और व्यवहार से प्रत्येक पर अपने तर्कों विभाजन खंड अलग पैटर्न के रूप में।

+0

बहुत बहुत धन्यवाद। मैं इसे गिनती के लिए इस्तेमाल कर रहा था इसलिए गिनती बंद हो गई होगी। Perlop लिंक के लिए – Psyllex

5

perlop देखें:

क्या कोण कोष्ठक के भीतर है न तो एक filehandle और न ही एक सरल अदिश चर एक filehandle नाम, typeglob, या typeglob संदर्भ युक्त, यह एक फ़ाइल नाम पैटर्न के रूप में व्याख्या की है है, तो ग्लोबबेड

+1

+1 – DVK