in reply to Re^2: Variable assignment error checking
in thread Variable assignment error checking

$cough ||= cough( $cough );
  • Comment on Re^3: Variable assignment error checking

Replies are listed 'Best First'.
Re^4: Variable assignment error checking
by davido (Cardinal) on Dec 16, 2013 at 15:53 UTC

    The OP requested to assign the return value of func($var) if that return value is true. Otherwise, to hold the original value of $var.

    You coughed up this: If $var is true, keep it, otherwise store a return value from func($var).

    To put it another way: Specification: if the function returns a true value, store it. Otherwise keep the original value.

    Your solution: If the original value is true keep it, otherwise call the function and keep its return value instead.

    Inverted logic. But you're not alone; several people upvoted your post, so it must be an easy mistake to make.


    Dave

      ... Inverted logic. But you're not alone; several people upvoted your post, so it must be an easy mistake to make.

      This :) When brain function less (like sleep deprivation), pattern recognition takes place instead of logic processing ... and  $foo = bar($foo) || $foo; is so close to  $foo = $foo || bar($foo); the association to  $foo ||= bar( $foo ); happens, and tired brain fail to realize they're different

      human brains, what can I tell you :)

      hmm, its more like logic processing doesn't check pattern recognition ... argument validation, even for brains

Re^4: Variable assignment error checking
by Anonymous Monk on Dec 15, 2013 at 09:06 UTC
    Call the function cough($cough) only if $cough is true?

        It is not! In this expression:

        $var = func($var) || $var;

        the return value of func($var) will be assigned to $var if func($var) is true, otherwise the value of $var. In this expression

        $var ||= func( $var );

        the return value of func($var) will be assigned to $var if $var is false.

        Completely different logic!

        The expression $var ||= func( $var ); is shorthand for $var = $var || func( $var );. Can you spot the difference?