標準入力で対話的にレコードを読みたい。CTRL+D は、レコードの終わりを示します。ctrl+c が押されるまで永遠に続きます。私のコードは次のエラーを生成しています:
Use of uninitialized value in open
Use of uninitialized value in <HANDLE>
null レコードをスキップするために必要な $rec をテストすることで、エラーを回避できます。しかし、よくわからない問題を隠しているように感じます。標準入力が閉じられていると思われますが、よくわかりません。エラーが発生する理由と、ループを修正する方法を説明できますか?
my $eof = $INPUT_RECORD_SEPARATOR;
while (1) {
local $INPUT_RECORD_SEPARATOR = chr(0x04);
my $rec = <STDIN>;
# format last record that ended with ^D
local $INPUT_RECORD_SEPARATOR = $eof;
open my $input, "<", \$rec;
my_formatting_func $input;
close $input;
}