1

サブルーチンで FTP からデータをダウンロードするスクリプトを作成しました。@station_list 配列に大文字でリストされているステーションに属するデータをダウンロードするようにプログラムに指示します。対応するデータは、各ステーションの名前を小文字で示した別のページに配置されています。 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");   
    }
}
4

2 に答える 2

2

私の最初の回答に対するあなたのコメントに応えて、あなたが何を求めていたのかをよりよく理解できるようになりました。foreachループの最後に、次のように呼び出し$ftp->cdupます。

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

これにより、親ディレクトリに戻ります。

于 2012-05-12T03:33:41.987 に答える
1

なぜそれが一度だけあなたに起こっているのか分かりませんが、いくつかの推奨事項があります:

  • use strict;スクリプトの一番上に置きuse warnings;ます。それらは、Perlが実際の問題を特定するのに役立つ診断を発行する原因となる可能性があります。
  • myすべての変数を;で宣言します。
  • lcそれらすべての\Lエスケープの代わりに使用してください。
  • のスペルを修正します$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
于 2012-05-12T03:07:36.210 に答える