note
tobyink
<p>If <c>sort BLOCK LIST</c> is encountered in a package, Perl switches off "used only once" warnings for the <c>$a</c> and <c>$b</c> package variables.</p>
<c>
use warnings;
use List::Util;
my $reduced = List::Util::reduce { $a + $b } 1, 2, 3, 4;
print "$reduced\n";
()=sort{;}();
</c>
<p>... that's why <c>sort</c> is magic.</p>
<p>List::Util could easily eliminate the warning; and it doesn't even need to use XS trickery to do so. It just needs to add something like this to its <c>import</c> method:</p>
<c>
my $pkg = caller;
eval qq[ package $pkg; our \$a; our \$b; ];
</c>
<p>I believe the old pure Perl implementation of List::Util used to do something along these lines. It seems the shiny, new XS-only version does not. I'd count that as a regression.</p>
<div class="pmsig"><div class="pmsig-757127">
<small><small><tt>package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name</tt></small></small>
</div></div>
1046932
1046932