is IO::CatHandle
此类存在于向后兼容的原因,并且不为 IO::CatHandle
提供任何其他方法,因此可以像这样以相同的方式使用它
my = IO::ArgFiles.new();.say for .lines;
如果使用 raku io-argfiles.raku *.raku
调用它,它将打印目录中所有具有该扩展名的文件的内容。但是,这完全等同于
my = IO::CatHandle.new();.say for .lines;
变量§
$*ARGFILES
§
此类是 $*ARGFILES
变量背后的魔力,该变量提供了一种遍历命令行中传递给程序的文件(即 @*ARGS
的元素)的方法。因此,上面的示例可以简化为
.say for .lines;# orwhile ! .eof# orsay .slurp;
将上述变体之一保存在文件中,例如 argfiles.raku
。然后创建另一个文件(例如,命名为 sonnet18.txt
,内容为
Shall I compare thee to a summer's day?
运行命令
$ raku argfiles.raku sonnet18.txt
然后将给出输出
Shall I compare thee to a summer's day?
从 6.d 语言开始,$*ARGFILES
在 sub MAIN
中始终设置为 $*IN
,即使 @*ARGS
不为空。这意味着
sub MAIN ()
例如,可以用作 cat *.raku | raku argfiles-main.raku
,完全等同于
sub MAIN ()
事实上,不能用于处理命令行中的参数,因为在这种情况下,它会导致使用错误。
请记住,对象 $*ARGFILES
将包含命令行中每个参数的句柄,即使该参数不是有效文件。您可以通过 .handles
方法检索它们。
for .handles ->
如果任何参数不是有效的文件名,则该代码将失败。您必须在另一个级别处理这种情况,例如检查 @*ARGS
是否包含有效的文件名。