В Perl 5 я могу проверить, открыт ли стандартный ввод, и прочитать из него одну строку.
for (;;) {
last if eof(STDIN);
print "Got line " . readline(STDIN);
}
Когда я запускаю его и ввожу строку ввода, он читает эту строку и выполняет свою работу, прежде чем двигаться дальше. Программе все равно, есть ли длинные паузы:
$ perl print-stdin.pl
this
Got line this
is
Got line is
a
Got line a
line
Got line line
Если я сделаю то же самое в Perl 6 (Rakudo 2017.07), программа сразу остановится:
use v6;
loop {
last if $*IN.eof;
put "Got line " ~ $*IN.get;
}
Мне действительно нужен Supply
, который может дать мне одну строку ввода по мере ее поступления (возможно, из программы, которая медленно выводит строку с длинными паузами), но я полностью вернулся к этой простой проблеме. Я не нашел встроенного способа сделать это (что немного удивительно для такой распространенной задачи).