Dan*_*rov 4 perl local utf-8 binmode
我的脚本开头有以下块:
#!/usr/bin/perl5 -w
use strict;
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
在某些子程序中,当存在其他编码时(来自远程子程序),当接收西里尔字符或其他字符时,数据将无法正确显示.它是"binmode",导致问题.
我可以在本地"关闭"binmode utf8,仅用于子程序吗?
我无法删除全局binmode设置,我无法更改远程编码.
实现此目的的一种方法是" STD复制" 句柄,设置复制的文件句柄以使用该:raw层,并将其分配给句柄的本地版本STD.例如,以下代码
binmode(STDOUT, ':utf8');
print(join(', ', PerlIO::get_layers(STDOUT)), "\n");
{
    open(my $duped, '>&', STDOUT);
    # The ':raw' argument could also be omitted.
    binmode($duped, ':raw');
    local *STDOUT = $duped;
    print(join(', ', PerlIO::get_layers(STDOUT)), "\n");
    close($duped);
}
print(join(', ', PerlIO::get_layers(STDOUT)), "\n");
版画
unix, perlio, utf8
unix, perlio
unix, perlio, utf8
在我的系统上.