Tengo un comportamiento extraño con la función de decir de Perl en el modo FCGI. Las nuevas líneas no se agregarán. ¿Por qué pasó esto?¿Por qué Perl dice() no añade nueva línea en modo FCGI?
Código de ejemplo:
#!/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';
}
Resultado esperado (y el resultado real a través de la consola):
Content-Type: text/plain; charset=utf-8
Hello, world. #1
6712
Test 1234
Resultado real a través de Apache/FCGI:
Content-Type: text/plain; charset=utf-8
Hello, world. #3
6709
Test 1234
Algo de información de software ..
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
En cuanto a una solución, creo que es más fácil decir "No hagas eso entonces". La alternativa es arreglar FCGI. Agregar 'unshift @_, $ \ if defined $ \\' después de [línea 264 de FCGI.PL] (https://metacpan.org/source/FLORA/FCGI-0.74/FCGI.PL#L265) podría hacer el truco . Pero existe la posibilidad de que rompa una gran cantidad de código dependiendo de que FCGI no respete $ \. – pmakholm
¿Quiere decir 'push @_, $ \ if defined $ \;', ¿verdad? –
Una solución simple sería volver a implementar 'say':' use subs qw/say /; sub say {print @_, "\ n"}; ' – Zaid