Doh. If I say it with Devel::Peek I note that the first call to sub2() was compiled when the (*) prototype wasn't known and @_ wasn't coerced into a scalar. The second was compiled when perl expected there to be only a scalar so instead of sub2(@_) you have sub2( scalar @_)
sub2 returns 1 because print() returns 1. This is 100% mundane. You might try saying print print '' to see what I mean.
use Devel::Peek; sub sub1(*) { print STDERR "args(1)\n"; Dump($_) for @_; sub2(@_); } sub sub2(*) { print STDERR "args(2)\n"; Dump($_) for @_; } sub sub3(*) { print STDERR "args(3)\n"; Dump($_) for @_; sub2(@_); } sub1 Bareword; sub3 Bareword; sub2(@{[Bareword]});
In reply to Re: Stumped when passing barewords
by diotalevi
in thread Stumped when passing barewords
by crenz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |