in reply to Re^2: no expected 'Useless use of a constant in void context' warning for expression in return statement
in thread no expected 'Useless use of a constant in void context' warning for expression in return statement
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)
|
|---|