quit を使用した後、Net::FTP オブジェクトを再利用できないようです。
これは期待されていますか?ドキュメントからはわかりませんでした(cpan)。
回避策として、ftp 操作のバッチを実行する必要があるたびに、新しい Net::FTP オブジェクトを作成しています。これは無駄に思えます。
次の例は、初期ログインの成功、ルート ディレクトリ ls の出力、終了 (ソケット クローズ)、ftp メッセージ「接続が閉じられました」でログインが失敗したことを示しています。
#!/usr/bin/env perl
use strict;
use warnings;
use Net::FTP;
my $hostname = 'foo';
my $username = 'bar';
my $password = 'baz';
# successful first pass
my $ftp = Net::FTP->new( $hostname ) or die "cannot connect to $hostname: $@";
$ftp->login( $username, $password ) or die "cannot login: ", $ftp->message;
map { print "ls_output: $_\n" } $ftp->ls; # success
$ftp->quit or die "cannot close connection: ", $ftp->message;
# re-use attempt
$ftp->login( $username, $password ) or die "cannot login: ", $ftp->message;
# never gets here since re-use attempt fails
print "done!\n";