kareila: Taking refuge from falling debris under a computer desk. (computercrash)
kareila ([personal profile] kareila) wrote in [site community profile] dw_dev2010-01-12 07:45 am
Entry tags:

the hazards of coding for webservers vs. shell scripts

When I was doing some code cleanup a few months ago, I saw some lines that looked like this:

my $foo;
$foo = $bar unless $baz;


I decided that looked redundant and changed it to:

my $foo = $bar unless $baz;

Take my advice: don't combine "my" statements and postfix conditionals. Ever.

I've updated the programming guidelines to warn people away from this as well.

The manifestation of this particular bug was to cause the $foo variable to be referenced in global scope if the conditional was false. In that situation, the assigned value would persist across execution threads, such that if two people in a row had a true $baz, the second user would see the first user's value of $foo. Even with use warnings and use strict in effect, Perl apparently thinks this is perfectly fine.

ETA: [personal profile] exor674 says this command will find it (but not in BML files):

perlcritic --single-policy ProhibitConditionalDeclarations
jadelennox: Senora Sabasa Garcia, by Goya (Default)

[personal profile] jadelennox 2010-01-12 07:38 pm (UTC)(link)
Huh. Nice catch.

Conway's Perl Best Practices' general reaction to postfix conditionals in any circumstance is STAB STAB STABBITY STAB, which is why perlcritic can be set to warn against them, but I know this is direct opposition to our coding guidelines.
vlion: cut of the flammarion woodcut, colored (Default)

[personal profile] vlion 2010-01-12 09:45 pm (UTC)(link)
I've usually found postfix conditions to wind up being more of a pain than otherwise; they tend to get factored into prefix conditionals.
sophie: A cartoon-like representation of a girl standing on a hill, with brown hair, blue eyes, a flowery top, and blue skirt. ☀ (Default)

[personal profile] sophie 2010-01-18 05:09 pm (UTC)(link)
I must admit, I'm mostly the same; I also don't tend to use unless at all, as my brain prefers consistency; I can deal with negated ifs.

But of course I stick to the coding guidelines for DW.