Month: September 2014

Perlbuzz news roundup for 2014-09-15

September 15, 2014 News roundup No comments

These links are collected from the
Perlbuzz Twitter feed.
If you have suggestions for news bits, please mail me at
andy@perlbuzz.com.

Template Toolkit’s DEFAULT directive does not short-circuit

September 15, 2014 CPAN No comments

Template Toolkit’s DEFAULT does not do short-circuit evaluation like you might think it would.
If you have

[% DEFAULT foo = user.calculate_foo; %]

Then the results of the method call user.calculate_foo are assigned to foo, unless foo already has a true value.
However, whether or not foo already has a true value, user.calculcate_foo is always invoked.
You might expect the code to look like this:

$foo = $user->calculate_foo() unless $foo;

But it’s really like this;

$temp = $user->calculate_foo();
$foo = $temp unless $foo;

So, if user.calculate_foo is an expensive function that you don’t want to invoke unless you have to, you’ll have to resort to an explicit IF block:

IF !foo;
    foo = user.calculate_foo;
END

It’s also worth noting that DEFAULT is not for checking if a variable is set, but for checking if it is true.