2015-01-20 3 views
2

Я пытаюсь скопировать файлы с хоста в созданный каталог. Вот мой сценарий:Как скопировать файлы с хоста в созданный каталог?

use strict; 
use Getopt::Long; 
use Net::SCP::Expect; 

my $filename; 
GetOptions(
    "file=s" => \$filename 
); 
my $src_path="/"; 
my $directory; 
open(INBOX, "<$filename") or die "Can't open $filename\n"; 

while(<INBOX>) { 
    chomp; 
    my @arr = split(/:/); 
    my $host=$arr[0]; 
    my $username=$arr[1]; 
    my $password=$arr[2]; 

    sub main { 
     my $directory = "temp"; 
     unless(-e $directory or mkdir $directory) { 
      die "Unable to create $directory"; 
     } 
    } 

    main(); 
    print "Copying from $host \n"; 
    my $scpe = Net::SCP::Expect->new(
     host  => $host, 
     user  => $username, 
     password => $password, 
    ); 
    $scpe->scp($host . ":" . $src_path, $directory); 

Но здесь я не могу переместить или скопировать файлы с компьютера на созданную директорию под названием Темп. Можете ли вы мне помочь в этом отношении в Perl?

+0

Что происходит, когда вы запускаете программу? Вы получаете сообщения об ошибках? – Kenster

+0

Как вы можете видеть, я попытался улучшить форматирование вашего ответа. Похоже, что это только часть кода, или есть закрывающая фигурная скобка '}', отсутствующая в конце ее. Постарайтесь, чтобы ваш код отступал правильно, так как вы легко увидите ошибки. Использование может использовать ['perltidy'] (https://metacpan.org/pod/perltidy), который безопасно и автоматически красиво форматирует ваш код. –

+0

Вы проверили код ошибки, возвращаемый функцией 'scp'? – Jens

ответ

1

Вы делаете странные вещи с обзорными здесь:

В вашей подпрограмме, - достаточно странно - называются «основные», вы объявляете локальной область переменную $ каталога и присвоить «темп» к нему.

Однако переменная $ directory, объявленная в основной программе в строке 10, остается пустой - но это тот, который используется в scp.

Я хотел бы предложить, чтобы изменить эту

sub main { 
    my $directory = "temp"; 
    unless(-e $directory or mkdir $directory) { 
     die "Unable to create $directory"; 
    } 
} 
main(); 

в том, что:

$directory = "temp"; 
unless(-e $directory or mkdir $directory) { 
    die "Unable to create $directory"; 
}