http://qs321.pair.com?node_id=485023
Category: Web Stuff
Author/Contact Info hybrid.basis@gmail.com, sk8er132@hotmail.com
Description: A very barebones, quick and dirty mini-FTP client I built myself (The Perl Cookbook is a wonderful thing indeed!), when the nag screen of my not-so-free FTP client started to annoy me(read: I am a broke,non-pirating student). I haven't quite worked out the error reporting on it yet, but it's VERY useful for synchronizing something on your web server with whatevers in the folder you put ftp.pl in.

If you're not too worried about having your password echoed back to your screen, you can remove the lines that involve Term::ReadKey and any changes in ReadMode.

Enjoy,
Spidy
#!/usr/bin/perl -w
#
#
use strict;
use Net::FTP;
use Net::FTP::File;
use Term::ReadKey;
use diagnostics;

my $username;
my $password;
my $directory;
my $localfile;
my $remotefile;
my $filename;
my $domain;

print "Luke's Neato FTP Script, Version 1.1\n";

print "Domain: ";
chomp($domain = <STDIN>);
my $ftp;

if($ftp = Net::FTP->new($domain)) {
    print "Successfully connected to $domain\n";
} else {
    print "Couldn't connect:\n\t" . $ftp->message ;
    quit();
}

print "Username: ";
chomp($username = <STDIN>);
ReadMode 2;
print "Password: ";
chomp($password = <STDIN>);
ReadMode 0;

if($ftp->login($username, $password)) {
    print "\nSuccessfully logged in as $username\@$domain\n";
} else {
    print "Couldn't Login:\n\t" . $ftp->message ;
    quit();
}

print "Working Directory: ";
chomp($directory = <STDIN>);

if($ftp->cwd($directory)) {
    # change working directory
    print "Successfully changed working directory to $directory";
} else {
    print "Couldn't change working directory:\n\t" . $ftp->message ;
    
    quit();
}


my @filearray;
my $input = '';
my $count = 0;
print "\n";
while () {
    print "File to upload: ";
    chomp($input=<STDIN>);
    if ($input ne '') {
        push @filearray, $input;
        $count++;
    next;
    }
    if ($input eq '') { last; }
}

foreach my $element (@filearray){
    my $chvalue = 0;
    if($element =~ /\.(.+?)$/){
        if($1 eq 'cgi' || $1 eq 'pl' || $1 eq 'pm') {
            $ftp->ascii;
            # transfer in ASCII mode
            $chvalue = 755;
            # chmod it to 755
        } else {
            $ftp->binary;
            $chvalue = 644;
        }
        if($ftp->put($element)) {
            print "$element uploaded successfully to $directory at $do
+main\n";
             if($ftp->chmod($chvalue, $element)) {
                 print "$element successfully chmoded to $chvalue.\n";
             } else {
                     print $ftp->message;
                    quit();
             }
        } else {
            print "Couldn't put $element:\n\t" . $ftp->message ;
            
            quit();
        }
    } else {
        if($ftp->put($element)) {
            print "$element uploaded successfully to $directory at $do
+main\n"
        } else {
            print $ftp->message;
            quit();
        }
    }
}

quit();
# quits, fancy that.
sub quit {
    $ftp->quit();
    print "Press any key to exit";
    chomp(my $chomp = <STDIN>);
    exit;
}