perl6如何从stdin读取并获取命令行参数?

lis*_*tor 6 stdin args perl6

我需要将"cat variousFiles"的结果传递给perl6程序,同时要求程序采用不同的命令行参数.Perl6似乎想把第一个参数作为要读取的文件.我可以重新编写我的例程,但我想使用shell中的管道.有办法吗?

这是我的程序名为testStdInArgs.pl:

say @*ARGS;
for lines() {
    say "reading ==> ", $_;
}
Run Code Online (Sandbox Code Playgroud)

我想做(foo和bar是参数):

cat logFile | perl6 testStdInArgs.pl foo bar
Run Code Online (Sandbox Code Playgroud)

以下是错误:

[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
Run Code Online (Sandbox Code Playgroud)

非常感谢你

sml*_*mls 5

lines功能是一个快捷方式$*ARGFILES.lines.
$*ARGFILES是一个魔术文件句柄,表示指定为命令行参数(@*ARGS)的文件的串联,并且只有在@*ARGS为空时才回退到stdin .

如果您总是想从stdin读取,请使用$*IN.lines:

for $*IN.lines {
    say "reading ==> $_";
}
Run Code Online (Sandbox Code Playgroud)

或者,让您的代码修改@*ARGS以删除您不希望被解释为文件名的任何命令行参数,然后使用lines().