2015-05-05 7 views
8

मैं कुशल तरीके पर्ल में फ़ाइलों को पढ़ने में में देख रहा था और यह बहुत ही दिलचस्प एक लाइनर में आए में slurping:फैंसी फ़ाइल पर्ल

my $text = do { local (@ARGV, $/) = $file; <> }; 

मेरा प्रश्न है: वास्तव में किस प्रकार काम करता है? आम तौर पर जब आप एक फ़ाइल slurping $/ = undef सेट, लेकिन मुझे नहीं लगता कि यह कैसे करता है। कोड का यह छोटा टुकड़ा मेरे सिर को चारों ओर लपेटना बहुत मुश्किल साबित हो रहा है।

इसके लिए एक सरल ब्रेकडाउन और स्पष्टीकरण क्या होगा?


अब मुझे पता है कि यह कैसे काम करता है, असली कल्पना प्राप्त करें!

नहीं कि इस कोड का कोई वास्तविक उपयोग है; यह देखने के लिए बस मजेदार है और शांत है। एक ही लाइनर एक ही समय में कई फाइलों को slurp करने के लिए है !!!

my @texts = map { local (@ARGV, $/) = $_; <> } @files; 
+1

perl एक ही असाइनमेंट में एकाधिक चर निर्दिष्ट करने की अनुमति देता है (यह नहीं पता कि इसे ठीक से कैसे कहा जाता है): '($ a, $ b, $ c) = (1, 2)'। '$ c' यहां 'undef' – n0rd

+3

समाप्त होगा जो भयानक है। आपको यह पूछना है कि यह क्या करता है, इसलिए इसे – Borodin

+1

डुप्लिकेट न करें कोड की यह पंक्ति वास्तव में पर्ल कोड का एक सामान्य रूप से उपयोग किया जाने वाला टुकड़ा प्रतीत होता है। मैंने इसे एक से अधिक स्थानों में देखा है जो मुझे इस सवाल से पूछने के लिए प्रेरित करता है। – tjwrona1992

उत्तर

10
local (@ARGV, $/) = $file; 

local @ARGV = ($file); 
local $/ = undef; 

<> तो $file से @ARGV में उल्लेख फ़ाइलें, अर्थात से पढ़ता के समान है।

+1

ओह, यह समझ में आता है, तो 'do {}' जो कुछ भी देता है अंतिम मूल्यांकन अभिव्यक्ति का मूल्य है, जो '<> 'या फ़ाइल की सामग्री का मान होगा। धन्यवाद @charoba! – tjwrona1992

+0

@ jwrona1992, 'do' का बिंदु उस दायरे को सीमित करना है जिसमें '@ ARGV' और' $/'बदल दिए गए हैं। – ikegami

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