Io 我如何阅读Rakudo Perl6中的STDIN?

Io 我如何阅读Rakudo Perl6中的STDIN?,io,stdin,raku,rakudo,Io,Stdin,Raku,Rakudo,就这么简单,如何在Perl6中读取来自STDIN的输入? 我认为有很多方法可以做到这一点,但我对最惯用的Perl6解决方案感兴趣。Perl6中的标准输入文件描述符是$*in(在Perl5中,*STDINtypeglob将STDIN文件描述符引用为*STDIN{IO}) 从标准输入读取数据的一种方法如下: for lines() { say "Read: ", $_ } 事实上,没有invocant对象的lines()在.lines()中默认为$*In 使用局部变量的替代方法是: for

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


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

Perl6中的标准输入文件描述符是
$*in
(在Perl5中,
*STDIN
typeglob将STDIN文件描述符引用为
*STDIN{IO}

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

for lines() {
    say "Read: ", $_
}
事实上,没有invocant对象的
lines()
在.lines()中默认为
$*In

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

for $*IN.lines() -> $line {
    say "Read: ", $line
}

看到更多的替代方法会很酷。

您也可以使用
slurp
不带参数地重复整个标准输入。这段代码会把整个输入都弄脏并打印出来

print slurp;
如果想要获取行,可以使用
lines()
迭代器,就像Perl5中的
一样工作。请注意,与Perl5不同的是,它会自动选择行

for lines() {
    say $_;
}
当您想要获取单行时,可以使用
get
,而不是使用
lines()
迭代器

say get();
如果您需要向用户询问某事,请使用
prompt()


当然
slurp()
不带参数的slurp在中表示您的
$*。具体地说,
*STDIN
是一个typeglob而不是一个文件描述符。与该typeglob关联的I/O句柄是
*STDIN{IO}
。该I/O句柄filehandle–dirhandle对的filehandle组件的文件描述符编号为
fileno(*STDIN{IO})
@GlitchMr:为什么不回答这个问题?@cosimo Add还请按块和/或不同分隔符读取–变量的类比。
my $name = prompt "Who are you? ";
say "Hi, $name.";