What is the meaning of the following statement in Perl:
num //= 0
perldoc perlop lists the Perl operators.
Logical Defined-Or
Although it has no direct equivalent in C, Perl's // operator is related to its C-style "or". In fact, it's exactly the same as ||, except that it tests the left hand side's definedness instead of its truth.
//=
is just the assignment version of it.
Assignment operators work as in C. That is,
$x += 2;
is equivalent to
$x = $x + 2;
So it assigns 0
to num
unless num
is already defined.
This is distinct from ||
since there are defined values which aren't true (such as 0
or an empty string).
$num = $num // 0;
is now the convenient way of
$num =
defined
$num ? $num : 0;
//
is referred to as defined-or operator that instead of testing for truth, tests for defined-ness.
Unless variable is undef
or array empty ()
(which actually evaluates to an undefined value in scalar context) — it's defined.
So my( $a, $b, $c ) = ( '', '0', 0 )
are all defined but false.
Beware prior to Perl 5.10 there was no such assignment like $pi //= PI
.
num //= 0, which is equivalent to
num = num // 0;
It means that it checks if the left operand is defined or not, if defined it returns the left operand else the right operand.
my $num;
$num //= 0;
print $num; # optputs 0
$num = 9;
$num //= 0;
print $num; # outputs 9