2012-05-12 2 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를 보낼 수 없습니다!") "" "$"). 문제는 $ ftp-> cwd (다음 방송국)입니다. 다음 스테이션으로 가려면 $ ftp_dir로 돌아가서 디렉터리를 다음 스테이션으로 변경해야합니다. 이 작업을 수행하는 방법을 알고 있습니까? –

관련 문제