Mam dziwne zachowanie z funkcją mówienia Perla w trybie FCGI. Newlines nie będą dołączane. Dlaczego to się dzieje?Dlaczego Perl powiedział() nie dołączać nowej linii w trybie FCGI?
Przykładowy kod:
#!/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';
}
Oczekiwany wynik (i rzeczywisty wynik za pośrednictwem konsoli):
Content-Type: text/plain; charset=utf-8
Hello, world. #1
6712
Test 1234
Rzeczywisty wynik przez Apache/fcgi:
Content-Type: text/plain; charset=utf-8
Hello, world. #3
6709
Test 1234
Niektóre informacje oprogramowanie ..
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
Jeśli chodzi o rozwiązanie, myślę, że najłatwiej jest powiedzieć "nie rób tego". Alternatywą jest naprawienie FCGI. Dodanie 'unshift @_, $ \ if zdefiniowanego $ \\' po [linia 264 z FCGI.PL] (https://metacpan.org/source/FLORA/FCGI-0.74/FCGI.PL#L265) może załatwić sprawę . Ale jest szansa, że złamie wiele kodów w zależności od FCGI, nie respektując $ \. – pmakholm
Masz na myśli 'push @_, $ \ if defined $ \;', prawda? –
Prostym obejściem byłoby ponowne wdrożenie 'say':' use subs qw/say /; sub say {print @_, "\ n"}; ' – Zaid