我如何阅读Rakudo Perl6中的STDIN?

Cos*_*imo 10 io stdin rakudo perl6 raku

就这么简单,如何在Perl6中读取STDIN的输入?

我认为有很多方法可以做到这一点,但我对最惯用的Perl6解决方案很感兴趣.

Cos*_*imo 9

Perl6中的标准输入文件描述符是$*IN(在Perl5中,*STDINtypeglob具有对STDIN文件描述符的引用*STDIN{IO}).

从标准输入读取的一种方法如下:

for lines() {
    say "Read: ", $_
}
Run Code Online (Sandbox Code Playgroud)

实际上,lines()没有默认的调用对象$*IN.lines().

使用局部变量的替代方法是:

for $*IN.lines() -> $line {
    say "Read: ", $line
}
Run Code Online (Sandbox Code Playgroud)

看到更多替代方法会很酷.

  • 当然.没有参数的`slurp()`会使你的`$*IN`陷入困境. (2认同)
  • 从技术上讲,`*STDIN`是一个typeglob而不是文件描述符.与该typeglob关联的I/O句柄是`*STDIN {IO}`.该I/O句柄filehandle-dirhandle对的文件句柄组件的文件描述符号是`fileno(*STDIN {IO})`. (2认同)

Kon*_*ski 8

您也可以使用slurp不带参数来填充整个标准输入.此代码将覆盖整个输入并打印它.

print slurp;
Run Code Online (Sandbox Code Playgroud)

如果你想获得行,你可以使用lines()迭代器,就像<>在Perl 5中一样工作.请注意,与Perl 5不同,它会自动选择行.

for lines() {
    say $_;
}
Run Code Online (Sandbox Code Playgroud)

当你想获得单行而不是使用lines()迭代器时,你可以使用get.

say get();
Run Code Online (Sandbox Code Playgroud)

如果您需要向用户询问某些事情,请使用prompt().

my $name = prompt "Who are you? ";
say "Hi, $name.";
Run Code Online (Sandbox Code Playgroud)