Как мне читать из 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.";