Подтвердить что ты не робот

Почему Perl сказал() не добавить новую строку в режиме FCGI?

У меня странное поведение с функцией Perl say в режиме FCGI. Новые строки не будут добавляться. Почему это происходит?

Пример кода:

#!/usr/bin/perl -wT
use strict;
use warnings;
use utf8;
use feature qw( say );
use FCGI ();
use CGI qw( header );
my $cnt = 0;
my $req = FCGI::Request();
while ( $req->Accept() >= 0 ) {
    $cnt++;
    print header( -type => 'text/plain', -charset => 'utf-8' );
    say "Hello, world #$cnt";
    print "\n";
    print "$$\n"
    print 'Test 1234';
}

Ожидаемый результат (и фактический результат через консоль):

Content-Type: text/plain; charset=utf-8

Hello, world. #1

6712
Test 1234

Фактический результат через Apache/FCGI:

Content-Type: text/plain; charset=utf-8

Hello, world. #3
6709
Test 1234

Информация о программном обеспечении...

Debian Wheezy x86_64 Apache/2.2.22-11 mod_fcgid/1: 2.3.6-1.1 Perl/5.14.2-12 FCGI.pm/0.75-1+b1

4b9b3361

Ответ 1

К сожалению, реализация функции say() требует, чтобы дескриптор файла поддерживал переменную $\. В основном говорят, что это эквивалентно написанию:

{ local $\ = "\n"; print LIST }

Используя FCGI, ваш STDOUT заменяется привязанным дескриптором файла, который не поддерживает $\. Это означает, что say() не работает должным образом. Является ли это ошибкой в ​​FCGI или в say(), представляется спорным.