perl6, как лучше всего вводить несколько многострочных документов здесь из $*IN
Мне нужно ввести несколько ЗДЕСЬ-DOC. Мои коды имеют 2 цикла. Внутренний цикл используется для получения многострочного Here-Doc. Но после того, как я вхожу в Control-D для завершения одного документа здесь, внутренний цикл while больше не запускается, а внешний цикл работает бесконечно. Каков наилучший способ исправить это?
while True {
my $y = "";
my $x = 32;
while $x=$*IN.getc {
$y = $y ~ $x;
}
say "==========";
say "[$y]"; sleep 2;
}
Почему $x продолжает оставаться EOF даже после того, как я сбросил $x на 32? Почему EOF застревает в $*IN? Спасибо за помощь.
1 ответ
Когда вы нажимаете Ctrl+D, терминал закрывает поток stdin на своем конце, а затем, когда Perl 6 пытается продолжить чтение с него, он всегда получает EOF.
В вашей программе это вызывает внутренний while
цикл до конца. Затем вы установите $x
в 32
снова, но при следующем запуске внутреннего while
петля, $x = $*IN.getc
немедленно устанавливает его Nil
опять же, потому что поток все еще закрыт.