我认为这个Perl应该产生['c',undef]但是在Windows 7上,它产生的ActiveState 5.16:[]。
#-----------------------------------------------------------------------
# Test List::Pairwise
#-----------------------------------------------------------------------
use v5.16;
use Data::Dump qw(dump);
use List::Pairwise qw(grepp mapp);
use Win32;
my $a = qr(\d+)x;
my $b = qr($a \. $a)x;
my %k = (a=>1, b=>2, c=>undef);
say dump([grepp {!$b} %k]);
say Win32::GetOSName();
say qx(perl -v);
产地:
[]
Win7Home Premium (64-bit)
This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)
答案 0 :(得分:2)
你不能用[{1}}将变量$a
和$b
词汇化,否则就会失去魔力。 my
和$a
实际上是特殊的包变量,无需声明您在$b
或sort
等函数中使用它们。如果你确实声明它们,任何依赖它们的函数将无法正常工作。
答案 1 :(得分:2)
List :: Pairwise在调用者的包中设置变量$a
和$b
。
通过使用my $b
,您告诉您的回复访问该词法变量而不是$::b
。
除了删除my $b
之外,您可以使用变量的全名或创建词法指令来访问包变量。
grepp { !$::b } %k
grepp { our $b; !$b } %k
grepp { !our $b } %k