in reply to ftp put without a local file

An easy way to do this would be to use IO::File's new_tmpfile to create a temporary file that will be automatically destroyed after it's closed, and possibly has no actual file on the file system. Then you can put the stuff to upload in that tempfile, rewind, and pass it to put():

use IO::File; use Fcntl qw(:seek); my $fh = IO::File->new_tmpfile or die "Couldn't create tempfile: $!\n"; print $fh <<"END"; The contents of the file. END seek $fh, 0, SEEK_SET or die "Couldn't rewind temp file: $!\n"; $ftp->put($fh, "ftptest"); close $fh; # tempfile should be gone now.

update: Note that $ftp->put(<SESAME>,"ftptest"); is not the right syntax to pass the SESAME file handle to $ftp->put. It will pass every line of the SESAME filehandle to it, causing failures from an unfound local file with a odd name. The correct syntax would probably be something like: $ftp->put(\*SESAME,"ftptest"); or $ftp->put(*SESAME,"ftptest");.