Perl 在打开时指定编码时无法写入

Perl 在打开时指定编码时无法写入,perl,Perl,也许我误解了编码等,但每当我在可写模式下打开表达式时指定编码时,打印到句柄似乎没有效果 代码: my $string = "one\n"; #open my $handle, '>>', \$string or die "cannot open: $!"; open my $handle, '>>:encoding(UTF-8)', \$string or die "cannot open: $!"; print $handle "two\n"; print $st

也许我误解了编码等,但每当我在可写模式下打开表达式时指定编码时,打印到句柄似乎没有效果

代码:

my $string = "one\n";

#open my $handle, '>>', \$string or die "cannot open: $!";
open my $handle, '>>:encoding(UTF-8)', \$string or die "cannot open: $!";

print $handle "two\n";

print $string;
one
one
two
输出:

my $string = "one\n";

#open my $handle, '>>', \$string or die "cannot open: $!";
open my $handle, '>>:encoding(UTF-8)', \$string or die "cannot open: $!";

print $handle "two\n";

print $string;
one
one
two
预期输出:

my $string = "one\n";

#open my $handle, '>>', \$string or die "cannot open: $!";
open my $handle, '>>:encoding(UTF-8)', \$string or die "cannot open: $!";

print $handle "two\n";

print $string;
one
one
two
谁能解释一下为什么会这样

谢谢


克里斯

你正遭受缓冲的痛苦。加

use IO::Handle qw( );
$handle->autoflush(1);

或者在从缓冲区读取之前关闭句柄。

此处\$string的用途是什么?要打开的第三个参数可以是标量引用,如果要将字符串视为文件,这非常有用。另外,使用IO::String可能更好。谢谢你,你的两个建议都解决了我的问题。您知道为什么这只是指定编码时的问题吗?编码层可能有自己的缓冲区。我不会指望它总是没有缓冲,没有:编码。谢谢你的解释,帮了大忙。