2016-12-22 11 views
5

"cat variousFiles"の結果をperl6プログラムにパイプする必要がありますが、プログラムは異なるコマンドライン引数を取る必要があります。 Perl6は最初の引数を読み込むファイルとして扱いたいと思うようです。私はルーチンを書き直すことができますが、シェルからパイプを使いたいと思います。それを行う方法はありますか?ここでperl6 stdinから読み込んでコマンドライン引数を取る方法は?

はtestStdInArgs.plという名前の私のプログラムである:私がやりたい

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

(fooとbarは、引数です):ここでは

cat logFile | perl6 testStdInArgs.pl foo bar 

はエラーです:

[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 

ありがとうございました

答えて

5

lines関数は、$*ARGFILES.linesのショートカットです。
$*ARGFILESは、コマンドライン引数(@*ARGS)として指定されたファイルの連結を表し、@*ARGSが空の場合にのみstdinにフォールバックするマジックファイルハンドルです。

あなたは常に標準入力から読みたい場合は、$*IN.linesを使用します。

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

、あなたはファイル名として解釈されないようにする任意のコマンドライン引数を削除するには、コードが@*ARGSを変更してみましょう、とlines()を使用してください。

+1

私は見る!ありがとう、smls! $ * ARGFILESは今日私があなたから学んだ新しいものです。大変ありがとう! (私がIT/IT分野にいなくても)毎日勉強するのは常に新しいものです。 – lisprogtor

関連する問題