http://qs1969.pair.com?node_id=11140618


in reply to Re^5: Get most recent data based on a date from an array of hashes.
in thread Get most recent data based on a date from an array of hashes.

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";

Replies are listed 'Best First'.
Re^7: Get most recent data based on a date from an array of hashes.
by Fletch (Bishop) on Jan 19, 2022 at 18:19 UTC

    It doesn't work for MM-DD-YYYY; it seems to work because you've managed to (luckily and/or unintentionally) pick data for which it works. For a counter example look what it'd do to "01-16-2000" and "01-13-2022" sorting newest to oldest. You need to use YMD for lexigraphic sorting to work.

    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.