Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Why Perl boolean expression sometimes treated as lvalue?

by Athanasius (Monsignor)
on Feb 08, 2013 at 12:24 UTC ( #1017805=note: print w/ replies, xml ) Need Help??


in reply to Why Perl boolean expression sometimes treated as lvalue?

In Perl, arguments are passed by reference, not by value. This is what perlsub means when it says: “The array @_ is a local array, but its elements are aliases for the actual scalar parameters.”

The subroutine call a($x && $y) causes the Perl interpreter to evaluate the boolean expression $x && $y to determine which variable is to be aliased. If $x is false, the expression short-circuits, so a reference to $x is passed in to the sub; but if $x is true, short-circuiting does not occur, and so it is a reference to $y that is passed in to the sub.

So it is misleading to say that the boolean expression works as an l-value. Within sub a, the boolean expression is never seen — only the reference to either $x or $y — and it is this reference which works as an l-value.

I haven’t found anything in the documentation to explain the process by which Perl derives a reference (“alias”) from a complex expression given as an argument to a subroutine. It might be useful to know — but, in general, it’s safer and clearer to keep things simple and just pass a variable or a value.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,


Comment on Re: Why Perl boolean expression sometimes treated as lvalue?
Select or Download Code
Re^2: Why Perl boolean expression sometimes treated as lvalue? (perlop, precedence)
by Anonymous Monk on Feb 08, 2013 at 12:37 UTC

    perlop perlop perlop , precedence is everything :)

    $ perl -E " print ( 1 && 2 ) 2 $ perl -E " sub ff { ++$_[0] } my($f,$a)=(1,5); ff( $f && $a ); say $f +; say $a; " 1 6

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1017805]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2014-12-29 00:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (183 votes), past polls