The List::MoreUtils module indicates that you use the variables $a
and $b
when supplying the BLOCK
that goes with the pairwise
Depends on what you consider elegant.
no warnings qw(once);
our ($a, $b);
One of these two will suffice. You can even limit their scope pretty easily.
my @sums = pairwise { no warnings qw(once); $a + $b } @x, @y;
my @sums = pairwise { our $a + our $b } @x, @y;
Explicitly specifying the package will suppress the warning too. If you're in main
,
my @sums = pairwise { $::a + $::b } @x, @y;
I have the same problem with a similar module I'm writing. The only solution I've found (other than using functions that use $a
and $b
twice, of course) is to put this line somewhere in your code:
$a = $b; # hack to disable warnings about "main::a" used only once
It basically does nothing, but it does disable the warning. Consider keeping the comment so future maintainers don't have to read your mind.
Add this near top of your program:
use vars qw( $a $b );
or, if you don't like the "obsolete" part of perldoc vars, simply add:
our ( $a, $b );
Yep, it's not you. You can no warnings 'once'; or you can predeclare $a and $b so that they will not be used once anymore.
our ($a, $b);
does the trick. I tend to prefer that because it doesn't turn off warnings for anything else, and it's a bit more descriptive.
This is probably a bug in List::Util
.
Turning off warnings globally is probably not a good idea, however you could do something like this:
{
no warnings 'once';
return join("_", @monsters) if @monsters && List::Util::reduce { $a && $b // 0 > 0 } 1,@monsters;
}
This would turn off the relevant warning category for that part of the code only.
As of perl 5.19.6, this warning is disabled for all uses of $a
and $b
everywhere.