【问题标题】:Perl Cannot Binmode STDOUT After Untie Filehandle解开文件句柄后 Perl 无法 Binmode STDOUT
【发布时间】:2012-06-01 07:00:20
【问题描述】:

我需要禁用 HTTP 响应的渐进式缓冲。

我已经在 Perl 中使用文件句柄类来实现这一点:

$|=1;
$TIE = tie(*STDOUT,__PACKAGE__);

打印语句存储在一个数组中,并通过以下方式检索:

$buffer = tied *STDOUT;
$buffer = join('', @$buffer);
undef $TIE;
untie(*STDOUT);

如果 HTTP 响应是 text/html,它会正确显示在浏览器中。

但是,对于二进制流,我无法在STDOUT解开后设置binmode,并且内容已损坏。

如果我将 HTTP 响应保存到文件中,或者如果我不使用文件句柄类,则会保留二进制数据。

关于如何强制进行原始编码的任何建议?谢谢。

【问题讨论】:

    标签: perl stdout filehandle tie binmode


    【解决方案1】:

    这样的作品?

    use strict;
    use warnings;
    use IO::Handle;
    
    my $io = IO::Handle->new;
    my $fh = $io->fdopen(fileno(STDOUT),"w");
    $fh->autoflush(1);
    
    my $TIE = tie( $fh ,__PACKAGE__);
    
    sub TIESCALAR { };
    
    binmode($fh);
    
    print $fh "Foo";
    

    【讨论】:

    • 谢谢,埃文。我已将其缩小到我的分块传输编码方法,该方法使用unpacka 模板。这似乎覆盖了binmode
    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2023-03-07
    • 2015-04-13
    相关资源
    最近更新 更多