List Assignment
A list may be assigned to only if each element of the list is itself legal to assign to:
($a, $b, $c) = (1, 2, 3);
($map{red}, $map{green}, $map{blue}) = (0xff0000, 0x00ff00, 0x0000ff);You may assign to undef in
a list. This is useful for throwing away some of the return values
of a function:
($dev, $ino, undef, undef, $uid, $gid) = stat($file);
You can even do this on my
declarations:
my ($dev, $ino, undef, undef, $uid, $gid) = stat($file);
The final list element may be an array or a hash:
($a, $b, @rest) = split; my ($a, $b, %rest) = @arg_list;
You can actually put an array or hash anywhere in the list you
assign to, but the first array or hash in the list will soak up all
the remaining values, and anything after it will be set to the
undefined value. This may be useful in a local or my, where you probably want the arrays
initialized to be empty anyway.
You can even assign to the empty list:
() = funkshun();
That ends up calling your function in list context but discarding the return values. If you had just called the function without an assignment, it would have instead been called in void context, which is a kind of scalar context, and might have caused the function to behave completely differently. List assignment in scalar context returns the number of elements produced by the expression on the right side of the assignment:
$x = ( ($a, $b) = (7,7,7) ); # set $x to 3, not 2 $x = ( ($a, $b) = funk() ); # set $x to funk()'s return count $x = ( () = funk() ); # also set $x ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access