2015-06-29 2 views
0

У меня есть файл с именем ftp, у которого есть имя файла, например ex.pl, в качестве его единственного содержимого, и я пытаюсь прочитать его через дескриптор файла и хранить его в скалярной переменной и пытаясь получить его через $ ftp-> get, но он дает ошибку: Bad remote filename 'ex.pl ' где ex.pl - это фактический файл, хранящийся в моем каталоге. Вот мой код:Perl Net :: FTP get error Bad remote filename 'ex.pl

sub restore() { 
    #open (IN,"ftpfile") or die "failed to open: $!"; 
    open(INN, "ftp") or die "fail to open: $!"; 
    my $array = <INN>; 
    print $array; 
    my $ftp = Net::FTP->new("$ARGV[0]") or die "host error: [email protected]"; 
    $ftp->login("$ARGV[1]", "$ARGV[2]") 
     or die "login error: ", $ftp->message; 
    $ftp->cwd("/home/qwerty/perl"); 
    $ftp->get("$array") or die "error:", $ftp->message; 
} 

restore; 

ответ

1

Проблема здесь - вам нужно chomp $array;, потому что в противном случае вы получите строку внедренной.

Я бы отметил - вы делаете что-то немного грязное с этим звонком open - INN будет глобальным дескриптором файла, и вы его не закрываете. Было бы лучше:

open (my $input, "<", "ftp") or die $!; 
my $filename = <$input>; #read one line; 
chomp $filename; 

Я хотел бы также предложить присваивая имя/входа в систему и т.д. ранее в программе:

my ($hostname, $login, $password) = @ARGV; 

Потому что тогда вы можете проверить ошибки эти вещи (например, если они существуют, и действительны и т. д.).

+0

это работает !!! благодаря – user4255847

Смежные вопросы