【问题标题】:perl6 How to read from stdin and take command line args?perl6 如何从标准输入读取并获取命令行参数?
【发布时间】:2016-12-22 06:18:55
【问题描述】:

我需要将“cat variousFiles”的结果通过管道传输到 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

非常感谢

【问题讨论】:

    标签: stdin args raku


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我明白了!谢谢短信!!! $*ARGFILES 是我今天从你那里学到的新东西。非常感谢你!每天都要学习新东西(即使我不在技术/IT 领域)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多