in reply to Send/Upload some text as *.TXT on FTP

It's Saturday night and I'm feeling bored :)

use strict; use warnings; use File::Temp 'tempfile'; use Net::FTP; use constant HOSTNAME => 'ftp.example.com'; use constant USERNAME => 'grinder'; use constant PASSWORD => 'seekret'; my $msg = <STDIN>; my ($out, $file) = tempfile('msg_XXXXXXXX', SUFFIX => '.txt'); print $out $msg or die "Cannot print to $file: $!\n"; close $out or die "Cannot close $file: $!\n"; my $host = Net::FTP->new(HOSTNAME) or die "Cannot connect to ", HOSTNAME, ": $!\n"; $host->login(USERNAME, PASSWORD) or die "login error: ", $host->message, $/; $host->put($file) or die "cannot put $file: ", $host->message, $/; $host->quit; unlink $file;

I haven't actually tested this, but I see no reason why it shouldn't work. Have fun!

• another intruder with the mooring in the heart of the Perl

Replies are listed 'Best First'.
Re^2: Send/Upload some text as *.TXT on FTP
by xoddam (Novice) on Mar 17, 2007 at 23:21 UTC
    ill test it tomorrow ! thank you ! you are the best ! :)
Re^2: Send/Upload some text as *.TXT on FTP
by sgifford (Prior) on Mar 18, 2007 at 18:27 UTC
    You can avoid a temporary file by using a filehandle opened on a scalar:
    my $msg = <STDIN>; open(my $msg_fh,"<",\$msg) or die "Couldn't create scalar filehandle: $!\n"; my $file = "msg_".time.".txt"; # ... $host->put($msg_fh,$file) or die "cannot put file: ", $host->message, $/;

    Both of these versions may overwrite an existing file on the remote server, although it's not likely. I thought maybe using put_unique would help, but there doesn't seem to be a way to force the filename to end with .txt (at least with my FTP server).

    Update: Fixed error in open statement, and lack of error checking that let that slip through. Also, this seems to miss the last byte of the string entered for some reason. I'm looking into it right now...

    Update: The missing byte happens on my system with grinder's code, too. It looks like a bug in Net::FTP::A.

    Update: This is CPAN RT Bug #25019.