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

在perl中查找最新日期的索引,perl,Perl,我有一个“YYYY月”形式的日期数组,如“2013年12月”、“2014年5月”等。我需要找到数组中最新日期的索引。是否有任何内置模块可以执行此操作 使用解析日期 然后使用来确定哪个是最新的 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 {T

我有一个“YYYY月”形式的日期数组,如“2013年12月”、“2014年5月”等。我需要找到数组中最新日期的索引。是否有任何内置模块可以执行此操作

使用解析日期

然后使用来确定哪个是最新的

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

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

#!/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";
#/usr/bin/perl
#你的密码在这里
严格使用;
使用警告;
我的@日期=(“2013年12月”、“2014年5月”、“1992年7月”、“2014年1月”);
my@sorted\u dates=sort{(split/\-/,$a)[0](split/\-/,$b)[0]||
(拆分/\-/,$a)[1]cmp(拆分/\-/,$b)[1]
}@日期;
打印“最新日期为”。$sorted_dates[-1]。“索引为$#排序日期”;

您的代码按字母顺序对月份进行排序。如果将“1992年7月”替换为“2014年7月”,则不起作用