Actually, regarding my problem, it doesn't make a difference to localize $|.
My server now looks like this, but has the same hang
#!/usr/bin/perl -w
use strict;
local $| = 1;
print "Content-Encoding: iso-8859-1\015\012",
"Content-Type: text/plain\015\012",
"\015\012";
warn "DEBUG: the content length is $ENV{CONTENT_LENGTH}\n";
my $returncode = read(STDIN, my $post_content, $ENV{CONTENT_LENGTH
+});
warn "DEBUG: the read returncode was $returncode\n";
warn "DEBUG: Finished.";
Stas Bekman has summed up why one would use $| = 1 under mod_perl quite well in
mod_perl: Performance Tuning.