If you're sorting $a cmp $b the most recent will be in the last element rather than the first so pull out $sorted[-1] instead. The alternative is to swap the order of comparison ($b cmp $a) and then the most recent will be first.
#!/usr/bin/env perl
use 5.032;
my @dates = qw( 02-03-2003 03-01-2015 01-15-2022 );
my @sorted = sort { my $new_a = join( q{-}, (split(/-/,$a))[2,0,1] );
my $new_b = join( q{-}, (split(/-/,$b))[2,0,1] );
$new_b cmp $new_a } @dates;
say $sorted[0];
__END__
$ perl blonk.plx
01-15-2022
The cake is a lie.
The cake is a lie.
The cake is a lie.
| [reply] [d/l] [select] |
I liked your approach to this, just one question, the code works with the dates in MM-DD-YYYY and YYYY-MM-DD, is this on this part of the code "2,0,1", that's the part I am confused with it, thanks!
#!/usr/bin/env perl
#use 5.032;
use strict;
use warnings;
use Data::Dumper;
my @dates = qw( 02-03-2003 03-01-2022 01-15-2022 01-15-2023 01-15-2001
+ 11-15-2023);
#my @dates = qw( 2003-02-03 2015-03-01 2032-01-15 2023-01-15 2001-01-1
+5 2028-11-15);
print "\n\n ".Dumper \@dates;
my @sorted = sort { my $new_a = join( q{-}, (split(/-/,$a))[2,0,1] );
my $new_b = join( q{-}, (split(/-/,$b))[2,0,1] );
$new_b cmp $new_a } @dates;
print "\n\n $sorted[0]\n\n";
| [reply] [d/l] |
my @d = qw( 01-13-2022 01-16-2000);
say for sort { $b cmp $a } @d;
As for the syntax giving you pause, that's just a list slice reordering elements. split(/-/,$a) returns a list of MM, DD, YYYY and then passes the list YYYY, MM, DD to join to be put back together. Search for "Slices" in perldata.
The cake is a lie.
The cake is a lie.
The cake is a lie.
| [reply] [d/l] [select] |