stdin - perl6 如何从标准输入读取并获取命令行参数?

标签 stdin args raku

我需要将“cat differentFiles”的结果通过管道传送到 perl6 程序,同时要求该程序采用不同的命令行参数。 Perl6 似乎想将第一个参数作为要读取的文件。我可以重写我的例程,但我想使用 shell 中的管道。有没有办法做到这一点?

这是我的名为 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

非常感谢

最佳答案

lines函数是 $*ARGFILES.lines 的快捷方式.$*ARGFILES是一个神奇的文件句柄,表示指定为命令行参数 ( @*ARGS ) 的文件的串联,并且仅当 @*ARGS 时才回退到标准输入是空的。

如果你总是想从标准输入读取,使用 $*IN.lines :

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

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

关于stdin - perl6 如何从标准输入读取并获取命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41276866/

相关文章:

具有交互式 child_process 产卵的 Node.js readline

c# - .NET (C#) 中的 "StandardIn has not been redirected"错误

c# - 如何在 C# 中将变量参数传递给内部方法

promise - Promise 对象内外的分号

raku - 对象之间的通信

ruby - 如何使用 rspec 测试 CLI 的标准输入

python - 在 os.dup2() 之后重定向标准输出/输入/错误

java - 使用多个 int 数组作为参数

python - 带/不带参数的 Django 管理命令

raku - 为什么这个duckmap会阻塞?