What are the two warnings "Useless use of a variable in void context at -e line 1." referring to?
They're referring to $x and $y, because the statement as written above is in void context, so these variables are in void context too. I was intentionally a little vauge with my "simply sitting there" because it's possible for them to not be in void context, for example if this statement was the last thing in a sub (the context that the sub is called in is passed through):
use warnings;
use strict;
my ($x,$y,$z);
sub foo { qw/a b c d/ }
sub bar {
my $a, $x, $y, $z = foo()
}
my @x = bar();
my $r = bar();
This only produces the warning "Parentheses missing around "my" list". @x will contain the values (undef, undef, undef, "d"), because $a, $x, and $y are undef (nothing is assigned to them), while $z is assigned the return value of foo(), which means it is assigned "d" because my example sub foo is returning a list, and a list in scalar context evaluates to its last value. $r will contain "d" for the same reason.