I assume you're having trouble with the nested ternary operators. You could do the same thing with an if-elsif-elsif-else chain, but it wouldn't look as nice as this. This method lines up the tests and results nicely. Here's a very simple one to show what's happening:

$result = $a ? $b : $c ? $d : $e ? $f : undef;

So it starts left-to-right through the first ternary operator. It checks the value of $a; if that's true, it returns the value of $b, and the expression is finished. It doesn't continue on to the following ternary operators, since they're all part of the third section of the operator.

But if $a is false, then it executes that third portion, which starts with the second ternary operator, checking the value of $c. If that's true, it returns the value of $d and stops. If $c is not true, it continues on to the third ternary operator, checking the value of $e, and so on.

Adding some parens to make the precedence clearer, you'd have this:

$result = $a ? $b : ( $c ? $d : ( $e ? $f : undef ));

So in the case of your code, each of those ternary operator lines compares to a regex, and if it matches, it then returns the matching substrings $1, $2, and $3, as specified on the right, to $y, $m, and $d, and the statement exits, continuing with the $y+= line (which also has nested ternary operators working the same way). If none of them match, it eventually gets down to the next statement, restarting the loop because it couldn't recognize the string as having a date format.

Aaron B.
Available for small or large Perl jobs and *nix system administration; see my home node.


In reply to Re: Help me understand this code? by aaron_baugher
in thread Help me understand this code? by ansabhailte

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.