I have a strange behaviour with Perl's say function in FCGI mode. Newlines won't be append. Why does this happen?
Sample code:
#!/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';
}
Expected result (and actual result via console):
Content-Type: text/plain; charset=utf-8
Hello, world. #1
6712
Test 1234
Actual result via Apache/FCGI:
Content-Type: text/plain; charset=utf-8
Hello, world. #3
6709
Test 1234
Some software info...
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
Unfortunately the implementation of the say() function requires the filehandle to support the $\ variable. Basically say is equivalent to writing:
{ local $\ = "\n"; print LIST }
Using FCGI, your STDOUT is replaced by a tied filehandle, which doesn't support $\. This means that say() doesn't work as intended. Whether this is a bug in FCGI or in say() seems to be debatable.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With