sub get_file_list { my %file_list; my $ftp = Net::FTP->new($hostname, Passive => $ftp_mode , Debug => 1, Timeout => 300); $ftp->login($username,$password) or return undef; my @remote_in_dir_list; my @remote_in_dir_files; foreach my $remote_dir (@remote_dirs) { @remote_in_dir_list = $ftp->dir($remote_dir); @remote_in_dir_list = map { if ($_ =~ m/^d/) { (split / /, $_)[-1] } else { } } @remote_in_dir_list; foreach my $remote_in_dir (@remote_in_dir_list) { $file_list{$remote_dir}{$remote_in_dir} = $ftp->dir("$remote_dir/$remote_in_dir"); @{$file_list{$remote_dir}{$remote_in_dir}} = grep( m/\.zip$/, @{$file_list{$remote_dir}{$remote_in_dir}}); @{$file_list{$remote_dir}{$remote_in_dir}} = map { unless ($_ =~ m/^d/) { (split / /, $_)[-1] } else { } } @{$file_list{$remote_dir}{$remote_in_dir}}; } } $ftp->quit(); return \%file_list; }