如何在Rakudo Perl6中从STDIN读取数据?

11

简单来说,我该如何在Perl6中从STDIN读取输入?

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

2个回答

12

在Perl6中,标准输入文件描述符为$*IN(在Perl5中,*STDIN类型的全局变量引用了STDIN文件描述符,如*STDIN {IO})。

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

for lines() {
    say "Read: ", $_
}

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

一种使用本地变量的替代方法是:

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

希望能看到更多其他的实现方式。


2
当没有参数时,slurp()函数会读取你的$*IN - Konrad Borowski
3
严格来说,*STDIN 是一个类型环境(typeglob)而不是文件描述符(file descriptor)。与该类型环境相关联的I/O句柄是*STDIN{IO}。该I/O句柄文件句柄-目录句柄对中文件句柄组件的文件描述符编号是fileno(*STDIN{IO}) - tchrist
@GlitchMr:为什么不将那个作为一个答案呢? - Christoph
@cosimo 请添加按块或不同分隔符阅读的功能 - 类比 $/ 变量。 - Hans Ginzel

10

你还可以使用不带参数的slurp命令来读取整个标准输入。此代码将读取整个输入并打印它。

print slurp;

如果你想要获取行,可以使用lines()迭代器,它的工作方式类似于Perl 5中的<>。请注意,与Perl 5不同的是,它会自动去除行尾换行符。

for lines() {
    say $_;
}

如果你想要获取单行,而不是使用lines()迭代器,你可以使用get方法。

say get();
如果您需要询问用户某些内容,请使用prompt()
my $name = prompt "Who are you? ";
say "Hi, $name.";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接