我想写一个Perl 6程序,它对不确定数量的文件执行相同的操作,就像你rm file1.txt file2.txt file3.txt在Linux中使用它一样.
我的代码看起来像这样:
#!/usr/bin/env perl6
my @args = @*ARGS.perl;
for @args -> $arg {
say $arg
}
Run Code Online (Sandbox Code Playgroud)
但是,当我调用它时,./loop_args.pl6 file1.txt file2.txt我得到以下输出:["file1.txt", "file2.txt"]
我究竟做错了什么?我只是想让它成为一个数组.
对于Perl6,arguments数组是@*ARGS,这给出了代码:
#! /usr/bin/env perl6
use v6;
for @*ARGS -> $arg
{
print("Arg $arg\n");
}
Run Code Online (Sandbox Code Playgroud)
所以你只需要删除.perl你的my @args = @*ARGS.perl;行.
编辑:根据拉尔夫斯的评论更新
所以这取决于你想要对文件做什么.如果你想通读它们,你可能想要看一下$*ARGFILES这是一个IO :: CatHandle对象,它将所有参数批量化并将它们视为文件列表.所以要打印出来,你可以做到.
#! /usr/bin/env perl6
use v6;
for $*ARGFILES.handles -> $IO {
$IO.path.say
}
Run Code Online (Sandbox Code Playgroud)
好吧,这比看@@ ARGS有点复杂.但是如果你想为每个文件打印前5行呢?
#! /usr/bin/env perl6
use v6;
for $*ARGFILES.handles -> $IO {
say $IO.lines: 5;
}
Run Code Online (Sandbox Code Playgroud)
或者您可能只想阅读所有文件的内容并打印出来?
#! /usr/bin/env perl6
use v6;
.say for $*ARGFILES.lines;
Run Code Online (Sandbox Code Playgroud)
希望能给你一些想法.