在perl中查找最新日期的索引

时间:2014-05-26 05:46:24

标签: perl

我有一系列'YYYY-Month'形式的日期,如'2013-Dec','2014-May'等等。我需要在数组中找到最新日期的索引。是否有任何内置模块来执行此操作。

2 个答案:

答案 0 :(得分:1)

使用Time::Piece strptime解析日期。

然后使用date comparisons确定哪个是最新的。

use strict;
use warnings;

use Time::Piece;
use List::Util qw(reduce);

my @strings = qw(2013-Dec 2014-May 2014-Jan 2014-Feb 2014-Jan);
my @dates = map {Time::Piece->strptime($_, "%Y-%b")} @strings;

my $maxid = reduce {$dates[$b] > $dates[$a] ? $b : $a} (0..$#dates);

print "$strings[$maxid]\n"

输出:

2014-May

答案 1 :(得分:0)

如果您不想使用任何模块,请使用下面的代码。

#!/usr/bin/perl
# your code goes here
use strict;
use warnings;
my @dates = ( '2013-Dec', '2014-May', '1992-July', '2014-Jan' );
my @sorted_dates = sort { (split /\-/, $a)[0] <=> (split /\-/, $b)[0] ||
                          (split /\-/, $a)[1] cmp (split /\-/, $b)[1] 
                        } @dates;
print "Latest date is ".$sorted_dates[-1]. " index is $#sorted_dates";

Demo