🎄 24/25. 在 Raku 中用 $*ARGFILES 读取文件
— 焉知非鱼欢迎来到Raku One-Liner Advent Calendar的第24天!
在前几天,我们正在读取文本文件,因此讨论 $*ARGFILES
是合乎逻辑的,这是一个内置的动态变量,在处理多个输入文件时可能很方便。
如何读取命令行中传递的两个或多个文件?
$ raku work.pl a.txt b.txt
如果您需要将所有文件一起处理,就像它们是单个数据源一样,您可以要求我们今天的变量以单行方式完成工作:
.say for $*ARGFILES.lines
在程序内部,您不必考虑循环文件; $*ARGFILES
将自动为您做到这一点。
如果命令行中没有文件,则该变量将附加到 STDIN:
$ cat a.txt b.txt | raku work.pl
确实很方便,不是吗?
6.d和MAIN #
如果你想在更大的程序中使用它,我也必须警告你。考虑以下程序:
sub MAIN(*@files) {
.say for $*ARGFILES.lines;
}
在 Perl 6.d 中, $*ARGFILES
在MAIN子例程内部和它之外的工作方式不同。
这个程序将完全适用于 Raku.c,但不适用于Raku.d. 换句话说,在Rakudo Star中,包括版本2018.10,$*ARGFILES
在命令行中处理文件名,但从 Rakudo Star 2018.12 开始,如果在 MAIN
中使用它,它将始终连接到 $*IN
。
这就是今天的 advent 文章的结束,几乎是今年整个日历的结束。不过,明天再来!