Perl 5では、標準入力が開いているかどうかを確認し、そこから1行を読むことができます。Perl 6のeofはあまりにも早くあきらめますか?
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の(2017.07 Rakudo)で同じことを行う場合は、プログラムがすぐに停止します:
use v6;
loop {
last if $*IN.eof;
put "Got line " ~ $*IN.get;
}
私は後に本当によ長い一時停止がある場合、プログラムは気にしません。 Supply
私はそれが到着すると(私はおそらく長い休止を持つ行を出力するプログラムから)私は入力の1行を与えることができますが、私はこの単純な問題のすべての方法をバックアップしました。私はこれを行うための組み込みの方法を見つけられませんでした(これは、このような一般的な作業では少し驚きです)。
:
は、上記のは、あなたがこのような供給を作成することができ、いくつかの理由では不可能であった場合。 –
@briandfoy '.eof'は、' .eof'が呼び出された(ノンブロッキング)瞬間に入力がファイルの最後にある場合にTrueを返します。それが閉じられるまで、TTY上でeofに到達するかどうかを知る方法はありません。 '.get'は' \ r'' \ r \ n' '\ n'等やファイルの終わりまでブロックします。つまり、TTYは '.get'への呼び出しの間にミリ秒よりも' .get'への呼び出しの間に閉じられる可能性が高くなります。基本的に '.eof'を使ってはいけません。 (私は少なくとも5年前にPerl 5を使ってこれを学んだことがありますが、そこに問題はありません) –
はい、TTYの場合、TTYが閉じられるまでeofがTrueを返さないと思います。 –