use Net::FTP; # this is wrong, because you cwd without checking # if $ftp is really an object or it is undef # (new() failed) $ftp = Net::FTP->new("some.host.name", Debug => 0) ; $ftp->cwd("/pub") ; # This is right instead, and it comes straight from # Net::FTP's documentation # See how every method call is checked for success $ftp = Net::FTP->new("some.host.name", Debug => 0) or die "Cannot connect to some.host.name: $@"; $ftp->login("anonymous",'-anonymous@') or die "Cannot login ", $ftp->message; $ftp->cwd("/pub") or die "Cannot change working directory ", $ftp->message; $ftp->get("that.file") or die "get failed ", $ftp->message; $ftp->quit;