2016-12-22 8 views
5

मुझे "cat differentfiles" के परिणाम को एक perl6 प्रोग्राम में पाइप करने की आवश्यकता है जबकि प्रोग्राम को विभिन्न कमांड लाइन तर्क लेने की आवश्यकता है। लगता है कि पर्ल 6 पढ़ने के लिए फ़ाइल के रूप में पहला तर्क लेना चाहता है। मैं अपने दिनचर्या दोबारा लिख ​​सकता हूं, लेकिन मैं खोल से एक पाइप का उपयोग करना चाहता हूं। क्या इसे करने का कोई तरीका है?perl6 stdin से कैसे पढ़ा जाए और कमांड लाइन तर्क लें?

यहाँ मेरी कार्यक्रम testStdInArgs.pl नाम है:

say @*ARGS; 
for lines() { 
    say "reading ==> ", $_; 
} 

मैं क्या करना चाहते हैं (foo और बार तर्क हैं):

[foo bar] 
Earlier failure: 
(HANDLED) Unable to open file 'foo' 
    in block <unit> at stdInArgs.pl line 2 

Final error: 
Type check failed in binding to $iter; expected Iterator but got Failure (Failure.new(exception...) 
    in block <unit> at stdInArgs.pl line 2 
:

cat logFile | perl6 testStdInArgs.pl foo bar 

यहाँ त्रुटियाँ हैं

आपको बहुत धन्यवाद

उत्तर

5

lines फ़ंक्शन $*ARGFILES.lines के लिए शॉर्टकट है।
$*ARGFILES एक जादू फ़ाइल हैंडल है जो कमांड लाइन तर्क (@*ARGS) के रूप में निर्दिष्ट फ़ाइलों के एक संयोजन का प्रतिनिधित्व करता है, और केवल @*ARGS खाली होने पर stdin पर वापस आ जाता है। वैकल्पिक रूप से

for $*IN.lines { 
    say "reading ==> $_"; 
} 

, अपने कोड को संशोधित @*ARGS किसी भी कमांड लाइन तर्क है कि आप फ़ाइल नाम के रूप में व्याख्या की जा नहीं करना चाहती दूर करने के लिए, और:

आप हमेशा stdin से पढ़ने के लिए चाहते हैं, $*IN.lines का उपयोग फिरlines() का उपयोग करें।

+1

मुझे लगता है! धन्यवाद मुस्कुराओ !!! $ * ARGFILES कुछ नया है जो मैंने आज से सीखा है। बहुत बहुत धन्यवाद !! हर रोज सीखने के लिए हमेशा कुछ नया (भले ही मैं तकनीक/आईटी क्षेत्र में नहीं हूं)। – lisprogtor

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