2

我需要输入多个 HERE-DOC。我的代码有 2 个 while 循环。内部循环用于获取多行 here-doc。但是当我输入 Control-D 完成一个 here-doc 后,内部 while 循环不再运行,外部循环无限运行。修复它的最佳方法是什么?

while True {
    my $y = ""; 
    my $x = 32;
    while $x=$*IN.getc { 
        $y = $y ~ $x; 
    }
    say "==========";
    say "[$y]"; sleep 2;
}

为什么即使我将 $x 重置为 32 后,$x 仍会继续为 EOF?为什么 EOF 会卡在 $*IN 中?谢谢您的帮助。

4

1 回答 1

2

当您按下 Ctrl+D 时,终端会在其末尾关闭标准输入流,然后当 Perl 6 尝试继续从中读取时,它总是会得到 EOF。

在您的程序中,这会导致内部while循环结束。然后您再次设置$x32,但在内while循环的下一次开始时,$x = $*IN.getc立即将其Nil再次设置为,因为流仍处于关闭状态。

于 2016-12-27T17:51:28.597 回答