Вы получите qucik и грязный хак за ваш небрежно сформулированный вопрос:
Первый:
Если вы используете Net :: FTP
, вам нужно позвонить
$ftp->dir()
, а не
$ftp->ls()
для получения длинного списка каталогов.
Затем попробуйте это:
use feature "say";
use Net::FTP;
use Date::Parse;
$ftp = Net::FTP->new("ftp", Debug => 0)
or die "Cannot connect to some.host.name: $@";
$ftp->login("anonymous",'-anonymous@')
or die "Cannot login ", $ftp->message;
$ftp->cwd("/pub")
or die "Cannot change working directory ", $ftp->message;
@dir = $ftp->dir()
or die "ls()/dir() failed ", $ftp->message;
#map {say } @dir;
#Now parse the array of strings that dir() returned
#magic numbers to find substring with modif-date
my $start = 44;
my $len = 10;
@dir = map {$_->[0]} sort {$b->[1] <=> $a->[1]} map {[$_, str2time(substr($_, $start, $len))] } grep {/^d/} @dir;
$latest = $dir[0];
Это будет работать толькодля каталогов с этим форматом
drwxr-xr-x 17 root other 4096 Apr 12 2010 software
, но не с этим (примечание: год отсутствует)
drwxr-xr-x 36 root root 4096 Nov 29 09:14 home
Код также будет игнорировать символические ссылки, такие как:
lrwxrwxrwx 1 root root 8 May 30 2011 i -> incoming
но это даст вам начало.
Конструкция
map{} sort{} map {} @array;
называется «преобразованием Шварца» и выполняет большую часть работы.