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.
my $data="FOOBAR";
pipe PIPEREAD, PIPEWRITE;
print PIPEWRITE $data;
close PIPEWRITE;
my($ftp) = Net::FTP->new($destserv) || die "error connecting\n";
$ftp->login($destuser, $destpass);
$ftp->binary();
$ftp->put(*PIPEREAD,"remotelogfile") or die "error uploading\n";
$ftp->quit();
Basically, I used
pipe to create a
real pipe between Perl and whatever
Net::FTP is doing.
Have fun,
Rich