0

私の側でテストするために、[ Net::FTP] [Net :: FTP]を使用してサーバーに接続し、特定のディレクトリでファイルを受信するプログラムを作成する必要があります。受け取ったら、同じ場所に戻します。

これが私のコードです:

   #!/usr/bin/perl

   use Net::FTP;

   $host = "serverA";
   $username = "test";
   $password = "ftptest123";
   $ftpdir = "/ftptest";
   $file = "ftptest.txt";

   $ftp = Net::FTP->new($host) or die "Error connecting to $host: $!";

   $ftp->login($username,$password) or die "Login failed: $!";

   $ftp->cwd($ftpdir) or die "Can't go to $ftpdir: $!";

   $ftp->get($file) or die "Can't get $file: $!";

   $ftp->put($file) or die "Can't put $file: $!";

   $ftp->quit or die "Error closing ftp connection: $!";

これについてどうやって行くかについてのアイデアはありますか?それはうまくいくように見えます、しかしそれが声明に当たると、putそれは私にこれを撃ちます:

[Net::FTP]: https://metacpan.org/module/Net::FTP
4

2 に答える 2

1

$ftp->messageではなく、のエラーメッセージを確認してください$!。ディレクトリへの書き込みアクセス権がないか、既存のファイルを上書きすることは許可されていないことを示している可能性があります...

于 2012-12-03T23:07:28.793 に答える
1

まず最初に、常に use strictuse warningsを使用し、すべての変数を最初に使用する時点で を使用して宣言する必要がありますmy。そうすれば、見過ごされがちな多くの些細なエラーが強調表示されます。

のドキュメントは、メソッドNet::FTPに関する情報を提供していないという点で不完全です。messageただし、 を使用してエラーに関する情報にアクセスできることは、概要から明らか$ftp->messageです。

もちろん、これはコンストラクターには適用されません。コンストラクターが失敗した場合、messageメソッドを提供するオブジェクトがないため、この場合、情報は組み込み変数に表示されます$@

プログラムでこのバリエーションを試してください。おそらく、失敗した理由がすぐにわかります。

#!/usr/bin/perl

use strict;
use warnings;

use Net::FTP;

my $host = 'serverA';
my $username = 'test';
my $password = 'ftptest123';
my $ftpdir = '/ftptest';
my $file = 'ftptest.txt';

my $ftp = Net::FTP->new($host) or die "Error connecting to $host: $@";

$ftp->login($username,$password) or die "Login failed: ", $ftp->message;

$ftp->cwd($ftpdir) or die "Can't go to $ftpdir: ", $ftp->message;

$ftp->get($file) or die "Can't get $file: ", $ftp->message;

$ftp->put($file) or die "Can't put $file: ", $ftp->message;

$ftp->quit or die "Error closing ftp connection: ", $ftp->message;
于 2012-12-04T04:12:05.653 に答える