Why is this? It's because the braces used in if/else structures introduce a new lexical scope, so when they're encountered Perl needs to create a new pad (i.e. a structure where it keeps my variables) even if that pad doesn't get used.

Of course, generally speaking clarity should win over speed. But in subs which are executed many thousands of times, use of the ternary for simple conditionals is a handy trick to have up your sleeve.

See also: the block forms of map and grep; control structures versus statement modifiers.

Update: thanks anonymous monk below for pointing out the precedence error in my original code for the ternary sub. Corrected above now. I think this illustrates perfectly my statement that "generally speaking clarity should win over speed". :-)