PPerl now seems to be working again. After numerous tweaks and attempted re-written bits in the daemon code, eventually things seemed a little stabler, then finally the following logic for the ARGV stuff seemed happiest on all platforms:
local *ARGV unless @ARGV;
if (!@ARGV) {
open(ARGV, "<&STDIN");
}
I have no idea why this wasn't required for working under Net::Server but was required for my own daemon code - perhaps Net::Server was just slow enough to hit some kind of sweet spot in when things happened, or perhaps it does something fundamentally different. Either way I'm just happy it all works now.
Overall it's left me hoping I never again have to write daemon code - it's all just way too flaky, and crash happy, and subject to cross platform idiosyncrasies for my liking. Hell, I'd rather hack on XML parsers ;-)
Thank god for 99% of my daemon-like tasks I have POE (and everyone else can use Stem if they want ;-)