首页 > 解决方案 > 在 Raku 中替代 Perl 的 <>?

问题描述

在这里学习我的 Raku(neé Perl 6)方法,非常好。但是我非常怀念<>Perl 5 的魔力,在这里你可以:

my $x = <>;
print $x;
while(<>) {
  print join(':', split);
}

(将下一个输入行读入$x,遍历其余行;如果没有给出文件,则输入来自命名为输入或标准输入的文件)。“Perl 5 到 6”教程/迁移指南/...只讨论slurping 整个文件,或open按名称 ing 单个文件。我找不到神奇的“按顺序从命名文件中获取输入”。

我要魔法回来!

标签: migrationraku

解决方案


您正在寻找的功能基本上已经存在。这个脚本:

my $x = get();
say "First: $x";
for lines() {
    .say
}

鉴于这些输入文件:

$ cat foo
foo line 1
foo line 2
$ cat bar
bar line 1
bar line 2

将,当被调用为:

raku script.p6 foo bar

产生输出:

First: foo line 1
foo line 2
bar line 1
bar line 2

$*IN如果没有文件,它也会从中获取输出。唯一不存在的是对 的单个替换<>,因为这将依赖于类似wantarray的功能,这与多次调度不兼容(并且 Raku 认为多次调度更有用)。

和 的零参数候选者get是根据文件句柄lines实现$*ARGFILES,该文件句柄提供从参数列表或从获取文件的功能$*IN- 这意味着可以将其传递给任何需要文件句柄的代码。


推荐阅读