Why doesn’t my program work? It refuses to connect to the host, I’ve tried two different servers and verified which port is used.
Note that I’m not very experienced when it comes to Perl.
use strict;
use Net::FTP;
use warnings;
my $num_args = $#ARGV+1;
my $filename;
my $port;
my $host;
my $ftp;
if($num_args < 2)
{
print "Usage: ftp.pl host [port] file\n";
exit();
}
elsif($num_args == 3)
{
$port = $ARGV[1];
$host = $ARGV[0];
$filename = $ARGV[2];
print "Connecting to $host on port $port.\n";
$ftp = Net::FTP->new($host, Port => $port, Timeout => 30, Debug => 1)
or die "Can't open $host on port $port.\n";
}
else
{
$host = $ARGV[0];
$filename = $ARGV[1];
print "Connecting to $host with the default port.\n";
$ftp = Net::FTP->new($host, Timeout => 30, Debug => 1)
or die "Can't open $host on port $port.\n";
}
print "Usename: ";
my $username = <>;
print "\nPassword: ";
my $password = <>;
$ftp->login($username, $password);
$ftp->put($filename) or die "Can't upload $filename.\n";
print "Done!\n";
$ftp->quit;
Thanks in advance.
Now that you already have your answer
<>-><STDIN>, I think I see the problem. When@ARGVcontains anything,<>is the ‘magic open’. Perl interprets the next item in@ARGVas a filename, opens it and reads it line by line. Therefore, I think you can probably do something like:Then if you had some connection creditials in a file (say named cred) like
then
would open host:8020 for file using credentials in cred.
I’m not sure you want to do that, its just that THAT is how
<>works.