Как мне читать из STDIN в Rakudo Perl6?

Как же просто, как я могу прочитать входные данные из STDIN в Perl6?

Я считаю, что есть много способов сделать это, но меня интересует самое идиоматическое решение Perl6.

2 ответа

Решение

Стандартный дескриптор входного файла в Perl6 $*IN (в Perl5 *STDIN typeglob имел ссылку на дескриптор файла STDIN как *STDIN{IO}).

Один из способов чтения из стандартного ввода следующий:

for lines() {
    say "Read: ", $_
}

По факту, lines() без инвокант объекта по умолчанию $*IN.lines(),

Альтернатива, которая использует локальную переменную:

for $*IN.lines() -> $line {
    say "Read: ", $line
}

Было бы здорово увидеть больше альтернативных способов сделать это.

Вы также можете отбросить весь стандартный ввод, используя slurp без аргументов. Этот код будет отбирать весь ввод и печатать его.

print slurp;

Если вы хотите получить строки, вы можете использовать lines() итератор, работает как <> в Perl 5. Обратите внимание, что в отличие от Perl 5, он автоматически разбивает строку.

for lines() {
    say $_;
}

Когда вы хотите получить одну строку вместо lines() итератор, вы можете использовать get,

say get();

Если вам нужно спросить пользователя о чем-то, используйте prompt(),

my $name = prompt "Who are you? ";
say "Hi, $name.";
Другие вопросы по тегам