Perl не может Binmode STDOUT после развязки файловой ручки
Мне нужно отключить прогрессивную буферизацию HTTP-ответа.
У меня это работает в Perl, используя класс дескриптора файла:
$|=1;
$TIE = tie(*STDOUT,__PACKAGE__);
Операторы печати хранятся в массиве и извлекаются с помощью следующего:
$buffer = tied *STDOUT;
$buffer = join('', @$buffer);
undef $TIE;
untie(*STDOUT);
Если ответ HTTP text/html
, он правильно отображается в браузере.
Однако для двоичных потоков я не могу установить binmode
на STDOUT
после того, как он отвязан, а содержимое повреждено.
Если я сохраняю ответ HTTP в файл или не использую класс дескриптора файла, двоичные данные сохраняются.
Любые предложения о том, как заставить сырое кодирование? Благодарю.
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";