में पाइप से unbuffered डेटा पढ़ें मैं पर्ल में एक पाइप से unbufferd डेटा पढ़ने की कोशिश कर रहा हूँ। उदाहरण के लिए नीचे दिए गए कार्यक्रम में:पर्ल
open FILE,"-|","iostat -dx 10 5";
$old=select FILE;
$|=1;
select $old;
$|=1;
foreach $i (<FILE>) {
print "GOT: $i\n";
}
iostat प्रत्येक 10 सेकंड (पांच बार) डेटा को थूकता है। आप इस कार्यक्रम को ऐसा करने की उम्मीद करेंगे। हालांकि, इसके बजाय यह 50 सेकंड (यानी 10x5) के लिए लटका हुआ प्रतीत होता है, जिसके बाद यह सभी डेटा निकाल देता है।
ईओएफ के लिए सभी तरह के इंतजार किए बिना, जो भी डेटा उपलब्ध है (बिना छेड़छाड़ में) वापस लौटने के लिए मैं कैसे प्राप्त कर सकता हूं?
पीएस मैंने विंडोज के तहत इसके कई संदर्भ देखे हैं - मैं इसे लिनक्स के तहत कर रहा हूं।
आपको 'fore' 'का उपयोग नहीं करना चाहिए। और आपका आउटपुट बफरिंग असीमित है, यह देखते हुए कि यह एक इनपुट हैंडल आउटपुट हैंडल नहीं है। – tchrist
समय और foreach का उपयोग करते समय क्या अंतर है? – Jean
@alertjean: 'foreach my $ i () {...}' में, फ़ाइल पढ़ने को संदर्भ संदर्भ में किया जाता है, यानी, 'foreach' लूप में लाइनों को संसाधित करने से पहले पूरी फ़ाइल पढ़ी जाती है। 'जबकि (मेरा $ i = ) {...} ', पढ़ा स्केलर संदर्भ में किया जाता है, यानी, प्रत्येक पंक्ति को पढ़ा जाता है और फिर अगली पंक्ति पढ़ने से पहले, जबकि ब्लॉक में संसाधित किया जाता है। –