The sorting by the 3 fields is unnecessary IF the year,month,day fields are of fixed width - meaning leading zeroes are required. If the leading zeroes are not there, then a numeric instead of alphanumeric compare is needed.

The fastest way to do the max date function in the YYYY-MM-DD case is to use List::Util. That is because List::Util and List::Util::More are implemented as XS (C code).

#!/usr/bin/perl -w use strict; # here only maxstr is needed, just showing them all... use List::Util qw(first max maxstr min minstr reduce shuffle sum); my @dates = ( '2011-03-12', '2011-04-09', '2010-12-31', '2010-12-30'); print maxstr(@dates),"\n"; #2011-04-09
This is actually such a big advantage that sometimes it is worth it performance wise to fix "malformed" dates to have the leading zeroes before doing min,max or range searches. The Perl string compare goes quickly.

Update: List::Util is a core module, meaning that it is already on your system without having to install any extra modules.


In reply to Re^2: Max date from set of dates by Marshall
in thread Max date from set of dates by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.