As others have pointed out, this is because Net::FTP is calling fileno. I just tried this and it worked for me - I don't think it will solve all your problems, but it might be a good starting point.
in reply to Inconsistancy within Net::FTP?
Basically, I used pipe to create a real pipe between Perl and whatever Net::FTP is doing.
pipe PIPEREAD, PIPEWRITE;
print PIPEWRITE $data;
my($ftp) = Net::FTP->new($destserv) || die "error connecting\n";
$ftp->put(*PIPEREAD,"remotelogfile") or die "error uploading\n";