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");   
    }
}
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 回答