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 )

$foo = 1, 2;
Useless use of a constant (2) in void context at -e line 1 (#1)

assignment(=) binds tighter than comma(,) so $foo is 1

$ perl -MO=Deparse,-p -e " $foo = 1, 2; " (($foo = 1), '???'); -e syntax OK
$one, $two = 1, 2;
Useless use of a variable in void context at -e line 1 (#1)

$ perl -MO=Deparse,-p -e " $one, $two = 1, 2; " ($one, ($two = 1), '???'); -e syntax OK
Another obvious one: $one, $two = foo();
Useless use of private variable in void context at -e line 1 (#1)

$ 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)

  • Comment on Re^3: no expected 'Useless use of a constant in void context' warning for expression in return statement
  • Select or Download Code