No, the expression is 10, 20 and it as a whole is evaluated in scalar context
Obvious mistakes (from Useless use of %s in void context )
assignment(=) binds tighter than comma(,) so $foo is 1
$ perl -MO=Deparse,-p -e " $foo = 1, 2; " (($foo = 1), '???'); -e syntax OK
$ perl -MO=Deparse,-p -e " $one, $two = 1, 2; " ($one, ($two = 1), '???'); -e syntax OK
$ perl -MO=Deparse,-p -e " sub foo { 1, 2 } $one, $two = foo(); " sub foo { (1, 2); } ($one, ($two = foo())); -e syntax OK
Since the behavior of comma operator in list/scalar context is well defined,
since the behaviour of a list in scalar/list context is well defined (see If you believe in Lists in Scalar Context, Clap your Hands ),
perl doesn't warn about : $two = foo();
because it is predictable/guaranteed/you're expected to know what it means
sub foo{1,2} ($f)= foo(); is like ($f) = (1,2); # no warn, $f is 1
sub foo{1,2} $f = foo(); is like $f = (1,2); # no warn, $f is 2
perl won't warn you, scalar context guarantees rightest most(last), list context guarantees leftest most (first)
In reply to Re^3: no expected 'Useless use of a constant in void context' warning for expression in return statement
by Anonymous Monk
in thread no expected 'Useless use of a constant in void context' warning for expression in return statement
by ed_hoch
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |