我想编写一个Perl 6程序,该程序对不确定数量的文件执行相同的操作,就像在Linux中使用rm file1.txt file2.txt file3.txt
一样。
我的代码如下:
#!/usr/bin/env perl6
my @args = @*ARGS.perl;
for @args -> $arg {
say $arg
}
但是,当我以./loop_args.pl6 file1.txt file2.txt
调用它时,会得到以下输出:["file1.txt", "file2.txt"]
我在做什么错?我只希望它是一个数组。
答案 0 :(得分:9)
对于Perl6,arguments数组为drake
,这给出了代码:
@*ARGS
因此,您只需要从#! /usr/bin/env perl6
use v6;
for @*ARGS -> $arg
{
print("Arg $arg\n");
}
行中删除.perl
。
编辑:根据Ralphs的评论进行了更新
答案 1 :(得分:5)
因此,这取决于您要处理的文件。如果您想通读它们,您可能想看看$*ARGFILES
,这是一个IO::CatHandle对象,该对象将所有参数分批处理并将其视为文件列表。因此,将它们全部打印出来就可以了。
#! /usr/bin/env perl6
use v6;
for $*ARGFILES.handles -> $IO {
$IO.path.say
}
好吧,这比看@ * ARGS时要复杂得多。但是,如果您想为每个文件打印前5行怎么办?
#! /usr/bin/env perl6
use v6;
for $*ARGFILES.handles -> $IO {
say $IO.lines: 5;
}
或者也许您只是想阅读所有文件的内容并打印出来?
#! /usr/bin/env perl6
use v6;
.say for $*ARGFILES.lines;
希望能给您一些想法。