perl6从$ * IN输入多个多行here-docs的最佳方法是什么

时间:2016-12-25 19:22:11

标签: perl6 getc

我需要输入多个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?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

按Ctrl + D时,终端关闭stdin流,然后当Perl 6尝试继续读取时,它总是得到EOF。

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