migration - 在 Raku 中替代 Perl 的 <>?
问题描述
在这里学习我的 Raku(neé Perl 6)方法,非常好。但是我非常怀念<>
Perl 5 的魔力,在这里你可以:
my $x = <>;
print $x;
while(<>) {
print join(':', split);
}
(将下一个输入行读入$x
,遍历其余行;如果没有给出文件,则输入来自命名为输入或标准输入的文件)。“Perl 5 到 6”教程/迁移指南/...只讨论slurp
ing 整个文件,或open
按名称 ing 单个文件。我找不到神奇的“按顺序从命名文件中获取输入”。
我要魔法回来!
解决方案
您正在寻找的功能基本上已经存在。这个脚本:
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
- 这意味着可以将其传递给任何需要文件句柄的代码。
推荐阅读
- angular - Angular/Typescript - 将不同的时间相加以检索总时间
- bash - 如何打印目录的倒数第二个文件夹的名称?重击
- javascript - 使用 JavaScript 调用 Azure DevOps REST API
- sql - 如何从表中获取最新数据?
- c# - 修复 CA1810:内联初始化引用类型静态字段
- javascript - 例如,如何每 5 秒更改一次图像?
- c - 模仿linux的排序命令,对文本文件的行进行排序
- reactjs - 在哪里声明接口?
- go - Couchbase 集群的 SearchQuery 在 Go 客户端的 v2 版本上不起作用
- arrays - 您可以将数组变量与控件链接吗?