xoddam has asked for the wisdom of the Perl Monks concerning the following question:

Hi PerlMonks, i am new to this site but i think its very good and i have one question, or more a problem. This is what i am looking for: I want to make a small program which works like this: It asks you what do you want to write. You write something and than this text has to be saved (sent) on my FTP server as *.TXT. For example, i open this programm, write, "Hi heers josh, how are you?" and than just push ENTER. And than this sentance shall be found on my FTP in a TXT document. I am sure perl is able to do it :) so if some1 has time, please help me. Thank you

Replies are listed 'Best First'.
Re: Send/Upload some text as *.TXT on FTP
by grinder (Bishop) on Mar 17, 2007 at 20:11 UTC

    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

      ill test it tomorrow ! thank you ! you are the best ! :)
      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.

Re: Send/Upload some text as *.TXT on FTP
by Corion (Patriarch) on Mar 17, 2007 at 18:50 UTC

    Just use Net::FTP - it's pretty much all set for you if you look at the documentation. It shouldn't be too hard to integrate that into the code you already have.