On Fri, Aug 14, 2009 at 18:00, Noah Garrett
Wallach<[email protected]> wrote:
snip
> we all found that in the docs. based on the information you posted. what
> does "||=" do?
snip
$x ||= $y;
is the same as
$x = $x || $y;
and that performs a logical or operation that returns $x if $x is true
or $y if $x is false. This means it is roughly equivalent to:
if ($x) {
$x = $x;
} else {
$x = $y;
}
It is often used to create default values:
#!/usr/bin/perl
use strict;
use warnings;
#!/usr/bin/perl
sub foo {
my ($x, $y, $z) = @_;
$x ||= 5;
$y ||= 10;
$z ||= 55;
print "x $x y $y z $z\n";
}
foo(); #all defaults
foo(1); #x set to 1, rest defaults
foo(1, 2); #x set to 1, y set to 2, z is default
foo(1, 2, 3); #x set to 1, y set to 2, z set to 3
This has problems though. If you can't set $x to 0 (since it is
false). In Perl 5.10, we have a new operator // and a corresponding
assignment operator //=. // tests $x for definededness rather than
for truth, so
$x //= 5;
is roughly equivalent to
if (defined $x) {
$x = $x;
} else {
$x = 5;
}
--
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/