Perl 6通过命令行参数进行迭代

时间:2018-11-13 01:49:38

标签: perl6

我想编写一个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"]

我在做什么错?我只希望它是一个数组。

2 个答案:

答案 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;

希望能给您一些想法。