Perl 6 перебирает аргументы командной строки - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу написать программу на Perl 6, которая выполняет ту же операцию с неопределенным числом файлов, так же, как вы можете использовать rm file1.txt file2.txt file3.txt в Linux.

Мой код выглядит так:

#!/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 голосов
/ 13 ноября 2018

Так что это зависит от того, что вы хотите сделать с файлами.Если вы хотите прочитать их все, вы можете взглянуть на $*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;

Надежда, которая дает вам некоторые идеи.

0 голосов
/ 13 ноября 2018

Для Perl6 массив аргументов равен @*ARGS, это дает код:

#! /usr/bin/env perl6

use v6;

for @*ARGS -> $arg
{
    print("Arg $arg\n");
}  

Так что вам просто нужно удалить .perl из вашей строки my @args = @*ARGS.perl;.

РЕДАКТИРОВАТЬ: Обновлено в соответствии с комментариями Ральфа

...