List::MoreUtils
模块表示当提供与成对函数一起使用的BLOCK时,您可以使用变量$ a和$ b。例如:
use strict; use warnings; use List::MoreUtils qw'pairwise'; my @x = ( 1 .. 5); my @y = (11 .. 15); my @sums = pairwise { $a + $b } @x,@y;
但是当我这样做时,我会得到如下警告:
Name "main::b" used only once: possible typo at try.pl line 7. Name "main::a" used only once: possible typo at try.pl line 7.
有没有一个优雅的方式来处理这个问题?
更新:
参见answer by Ether for perl v5.19.6及以上:问题解决了。
解决方法
取决于你认为优雅。
no warnings qw(once); our ($a,$b);
这两个之一就足够了。甚至可以很容易地限制其范围。
my @sums = pairwise { no warnings qw(once); $a + $b } @x,@y; my @sums = pairwise { our $a + our $b } @x,@y;
明确指定包将会抑制警告。如果你主要,
my @sums = pairwise { $::a + $::b } @x,@y;