いや、うちの環境では問題なく動いてるんだけど。
自動で他所のサーバからログファイルを FTP で get してきてほげほげするプログラムを Perl で書いたのだが、FTP 処理に Net::FTP モジュールを使っている。
うちの社内環境では問題なく動くのだが、お客さんとこのサーバに持ち込むとエラーが出てしまう。
Can't use an undefined value as a symbol reference at /usr/lib/perl5/5.8.5/Net/FTP/dataconn.pm line 53.
という具合。
まあ、Net::FTP モジュールのバージョンが違うんだろうけど。(お客さんところのバージョンを調べるのを忘れていたが、Perl のバージョンはうちは v5.10.1、お客さんのところは v5.8.5。Net::FTP モジュールのバージョンも随分違うのだろう。但し、dataconn.pm のバージョンは同じだった)
$ftp->get($remote_file, $local_file) でファイルの取得をするところで発生している。
ググってみるとけっこうこのエラーで悩んでる人いるなあ。
ただ、日本語ページで解決策が書かれたものは無かった。
英語のフォーラムの書き込みを見ると、どうも FTP サーバに接続時に、明示的にパッシブモードの指定をしないといかんようじゃねえ。
ということで、接続処理のところを、
$ftp = Net::FTP->new($host);↓$ftp = Net::FTP->new($host, Debug=>0, Passive=>0);
このように修正したらエラーは出なくなった。
(Debug はおまけね)
古いバージョンの Net::FTP モジュールを使う時はご注意を。
コメントする