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 опять же, потому что поток все еще закрыт.

Другие вопросы по тегам