Keep It Simple, Stupid | |
PerlMonks |
Re: Help me understand this code?by aaron_baugher (Curate) |
on May 21, 2015 at 22:19 UTC ( [id://1127410]=note: print w/replies, xml ) | Need Help?? |
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:
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:
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.
In Section
Seekers of Perl Wisdom
|
|