Beefy Boxes and Bandwidth Generously Provided by pair Networks
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??


in reply to Help me understand this code?

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.

Replies are listed 'Best First'.
Re^2: Help me understand this code?
by ansabhailte (Novice) on May 21, 2015 at 22:25 UTC
    Ah thank you!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1127410]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (4)
As of 2024-04-19 03:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found