bhhensem has asked for the wisdom of the Perl Monks concerning the following question:

HI...

Actually I want to get latest file in remote machine via FTP.

I have tried to use mdtm to sort the filename based on timestamp and get the latest filename.

Unfortunately, the script display blank for the mdtm and i cannot get the latest filename. I do not know why this is happened.

Is there any solution i can used to sort the filename ?. The filename start from 1 to 9999 recursively.

My code as below

my @list = $ftp->ls(); if ($cur_seq == 9999) { $ck_current = 1; } else { $ck_current = $cur_seq+1; } foreach my $name (@list) { #($pattern = $pattern) =~ s/\.*//g; if ($name =~ /^$file_pattern$/) { ($ckseq = substr($name,6,6)) =~ s/^0+//g; $list_filename{$ckseq} = $name; my $mdtm = $ftp->mdtm($name); if ($mdtm > $lasttm) { $latestfile = $name; $lasttm = $mdtm; } } } (my $lastseq = substr($latestfile,6,6)) =~ s/^0+//g;

Thank you

Replies are listed 'Best First'.
Re: How to sort filename based on time via FTP
by Anonymous Monk on Dec 19, 2014 at 11:50 UTC
    ($ckseq = substr($name,6,6)) =~ s/^0+//g;
    Are you sure it does what you want? That will change $name in-place (becase substr is magical). Also, $ckseq will always be 1. If you want the number of 0s that should be s/0//g (or, better, tr/0//, which will also fix the first bug)
Re: How to sort filename based on time via FTP
by GotToBTru (Prior) on Dec 19, 2014 at 14:58 UTC

    Use the feature method (I'm assuming you're using Net::FTP) to determine if mdtm is supported.

    1 Peter 4:10