in reply to Re: Does eval cause that much of a performance hit?
in thread Does eval cause that much of a performance hit?

What are the alternatives:

my $foo; if( $baz ) { $foo = $bar; }

Or

my $foo; $foo = $bar if $baz;

Of course, if you're setting $foo, then presumably your gonna use it at some point later. And unless your enamoured with testing every variable for undef prior to using it, then in most cases there is a sensible default that it can be initialised to. In which case:

my $foo = 0; $foo = $bar if $baz;

Of course, that can be done "long hand" also if that's you preference.

And that's the point. Using this particular flaw in the Perl semantics as a justifiction for a style preference is disingenuous.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re^3: Does eval cause that much of a performance hit?
by grinder (Bishop) on May 06, 2009 at 13:38 UTC
    What are the alternatives

    An alternative to your alternatives

    my $foo = defined($baz) ? $bar : undef;

    or, with a sensible default, as an explicit undef is pretty dumb,

    my $foo = defined($baz) ? $bar : 0;

    This saves at least a nextstate and an assignment, for no loss of readability.

    • another intruder with the mooring in the heart of the Perl

      I agree with you, except that we've now moved so far from the OPs point: prefer things like a three line if construct than a trailing if., and perrin's response that we're almost on a different subject. 'sides which, the same people that eshew the trailing if also tend to reject the ternary as too complex/confusing/unclear/short.

      as an explicit undef is pretty dumb,

      I'm not sure where you saw the explicit undef?


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

        I don't think the topic has drifted.

        The point I wanted to make was that a ternary conditional is a viable alternative to introducing a scope (a 3-line if), if statement modifiers are not favoured by local shop practices. (Which is a reasonable edict, even if I don't agree with it myself).

        I'm not sure where you saw the explicit undef?

        There was none. It came about in my snippet from employing a ternary, which requires one to put something "in the else" part.

        • another intruder with the mooring in the heart of the Perl

Re^3: Does eval cause that much of a performance hit?
by perrin (Chancellor) on May 06, 2009 at 20:03 UTC

    I was teasing. I use trailing if, although only in certain circumstances:

    • it fits on one line without any obfuscation and
    • it's an interrupt, like a next or return.

    But the flaw I pointed out with "my...if" is serious and scary and everyone should be aware of it.

      I apologise for missing the humour. And you're right about "my..if".