Bryan R Harris wrote:
>
>>>Can someone explain what:
>>>
>>>$pi ||= 3;
>>>
>>>...means? I just saw it in Programming Perl (pp 540), but it doesn't
>>>explain it. Thx!
>>|| is the logical OR operator (see perldoc perlop) which says that if $pi is
>>TRUE then keep the current value of $pi but if $pi is FALSE then assign 3 to
>>$pi.
>>
>>That could also be written as:
>>
>>unless ( $pi ) {
>> $pi = 3;
>> }
>
>
> Aah, I see now. Just like the following pairs of commands do equivalent
> things:
>
> $pi += 3
> $pi = $pi + 3
>
> $pi ||= 3
> $pi = $pi || 3
>
> Is there an "&&=" also?
perldoc perlop
[snip]
Assignment Operators
"=" is the ordinary assignment operator.
Assignment operators work as in C. That is,
$a += 2;
is equivalent to
$a = $a + 2;
although without duplicating any side effects that dereferencing the
lvalue might trigger, such as from tie(). Other assignment operators
work similarly. The following are recognized:
**= += *= &= <<= &&=
-= /= |= >>= ||=
.= %= ^=
x=
Although these are grouped by family, they all have the precedence of
assignment.
Unlike in C, the scalar assignment operator produces a valid lvalue.
Modifying an assignment is equivalent to doing the assignment and then
modifying the variable that was assigned to. This is useful for
modifying a copy of something, like this:
($tmp = $global) =~ tr [A-Z] [a-z];
Likewise,
($a += 2) *= 3;
is equivalent to
$a += 2;
$a *= 3;
Similarly, a list assignment in list context produces the list of
lvalues assigned to, and a list assignment in scalar context returns
the number of elements produced by the expression on the right hand
side of the assignment.
> How about "or="?
As you can see from the documentation above, no.
> (I can't think of why I'd need it, but I'm just curious if perl is
> converting "<left> <anything>= <right>" to "<left> = <left> <anything>
> <right>".)
No. If anything it would convert "$x = $x OP $y" to "$x OP= $y" because the
OP= operators are usually more efficient, and I know that perl converts $x++
to ++$x, if there are no side effects, because ++$x is more efficient.
If you really need to understand why they are more efficient you need an
understanding of assembly language and the C programming language. :-)
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>