2012-05-12 10 views
1

サブルーチンでFTPからデータをダウンロードするスクリプトを作成しました。 @station_list配列にリストされている私のステーションに属するデータを大文字でダウンロードするようにプログラムに指示します。対応するデータは、各ステーションの名前を小文字で区切って別々のページに配置されています。 ftp:// $ ftp_srv/$ ftp_dir/aaaaはaaaaステーションのページで、ftp:// $ ftp_srv/$ ftp_dir/bbbbはbbbbステーションのページです。だから、大文字をダウンロードして小さなものに変換するためのループを作ります。しかし、それは最初の駅のために働くだけです。私はそれを修正するために何をすればよいかわかりません。何か助けてくれてありがとう。 次のコードは、前述のループです:ループでのダウンロード中に大文字を小文字に変更する際にエラーが発生しました

foreach $station (@station_list) { 

    $litte_station = "\L$station\E"; 

    unless ($ftp->cwd($litte_station)) { 
     $ftp->quit; 
     print2("Can't cd to $station $!\n"); 
     return (0); 
    } 

    $filename = "\L${station}\E${doy}\L$sessionchar\E.${yy}o.gz"; 
    print2 ("Get file: ${ftp_srv}\\${ftp_dir}\\${yyyy}\\${doy}\\${filename} ..."); 

    unless ($ftp->get($filename, $ftp_savepath.$filename)) { 
     print2(" NOT AVAILABLE\n"); 
    } else { 
     print2 (" Successful \n"); 
    } 
} 

答えて

2

私の最初の答えにあなたのコメントを受けて、私は今、より良いあなたが求めていたものを理解しています。あなたのforeachループの最後で、$ftp->cdupを呼び出す:親ディレクトリに戻ります

foreach my $station (@station_list) { 
    $ftp->cwd(lc $station); 
    # ... 
    $ftp->cdup; 
} 

+0

ありがとうございました。 –

1

それは一度だけあなたに起こって、なぜ私は知らないが、私はいくつかの提言を持っている:

  • はの上部にuse strict;use warnings;を入れてあなたのスクリプト。 Perlに実際の問題を特定するのに役立つ診断を出すようになるかもしれません。
  • すべての変数をmyで宣言します。
  • \Lエスケープの代わりにlcを使用してください。
  • $litte_stationのスペルを修正しました。

は、だから私のようなものを書いた:

use strict; 
use warnings; 

my @station_list = qw(AAA BBB CCC); 

foreach my $station (@station_list) { 
    my $litte_station = lc $station; 
    print $litte_station, $/; 
} 

をそして、それは出力:

aaa 
bbb 
ccc 
+0

ありがとうございます。しかし、私はプログラムが小文字の作成に問題がないことを知っていました。 "print2($ station $にcdできない!\ n") " )。問題は$ ftp-> cwd(次のステーション)です。次のステーションに行くためには、$ ftp_dirに戻り、ディレクトリを次のステーションに変更する必要があります。私はこれをどのように行うことができるか知っていますか? –

関連する問題