Migration Perl'的替代方案;s<&燃气轮机;在拉库?

Migration Perl'的替代方案;s<&燃气轮机;在拉库?,migration,raku,Migration,Raku,在这里学习我在Raku(neéPerl 6)的方法,非常好。但是我非常怀念Perl 5的魔力,在这里您可以: my $x = <>; print $x; while(<>) { print join(':', split); } my$x=; 打印$x; while(){ 打印联接(“:”,拆分); } (将下一个输入行读入$x,循环其余部分;输入来自名为input或standard input的文件(如果没有提供文件)。“Perl5到6”教程/迁移指南/。。。只

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

my $x = <>;
print $x;
while(<>) {
  print join(':', split);
}
my$x=;
打印$x;
while(){
打印联接(“:”,拆分);
}
(将下一个输入行读入
$x
,循环其余部分;输入来自名为input或standard input的文件(如果没有提供文件)。“Perl5到6”教程/迁移指南/。。。只需谈论
slurp
ing整个文件,或
open
ing单个文件的名称。我找不到神奇的“按顺序从命名文件中获取输入”

我要魔法回来

你有足够的魔法吗

sub MAIN( Str $file where *.IO.f  )
{
    .say for $file.IO.lines.map: *.comb.join(':');
}

您正在寻找的功能基本上是存在的。此脚本:

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
如果没有文件,它还将从中的
$*获取输出。唯一不存在的是对
的单一替换,因为这将取决于类似于
wantarray
的功能,这与多重分派不兼容(Raku认为多重分派更有用)


实现了
get
的零arg候选,这是一个文件句柄,提供了从参数列表或
$*中获取文件的功能,这意味着可以将其传递给任何需要文件句柄的代码。

这很酷,OP应该尝试一下,但在一些方面不同。请参阅jnthn的答案,了解如何模拟
的行为,并注意,raku的
.comb
没有参数会将字符串拆分为单个字符,而Perl的
没有参数的拆分
。在raku中拆分(/\s+/)
。拆分
.split
的替代方法是
.words
——为什么,天哪,我是不是一直忘了
单词
方法?或者,学究式的:raku script.raku foo bar.;-)