2012-06-01 6 views
4

HTTP 응답의 점진적 버퍼링을 비활성화해야합니다.Perl은 파일 핸들을 풀어 놓은 후 STDOUT을 처리 할 수 ​​없습니다.

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

인쇄 문은 배열에 저장되며 다음을 통해 검색됩니다 :

나는 파일 핸들 클래스를 사용하여 펄에서이 작업있어

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

을하는 경우 HTTP 응답 text/html이면 올바르게 브라우저에 표시됩니다.

그러나 이진 스트림의 경우 binmodeSTDOUT으로 설정하고 내용을 손상시킨 후에 설정할 수 없습니다.

파일에 HTTP 응답을 저장하거나 파일 핸들 클래스를 사용하지 않으면 이진 데이터가 보존됩니다.

원시 인코딩을 강제하는 방법에 대한 제안 사항이 있으십니까? 감사.

답변

2

이 작업과 비슷한 기능이 있습니까?

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"; 
+0

감사합니다. 나는'a' 템플릿으로'unpack '을 사용하는 청크 분할 전송 방식으로 좁혔습니다. 그것은'binmode'를 무시하는 것 같습니다. – xpsd300