Windows + ActiveState上的Perl List :: pairwise会产生意外结果

时间:2013-09-11 20:13:18

标签: perl

我认为这个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)

2 个答案:

答案 0 :(得分:2)

你不能用[{1}}将变量$a$b词汇化,否则就会失去魔力。 my$a实际上是特殊的包变量,无需声明您在$bsort等函数中使用它们。如果你确实声明它们,任何依赖它们的函数将无法正常工作。

答案 1 :(得分:2)

List :: Pairwise在调用者的包中设置变量$a$b

通过使用my $b,您告诉您的回复访问该词法变量而不是$::b

除了删除my $b之外,您可以使用变量的全名或创建词法指令来访问包变量。

grepp { !$::b } %k

grepp { our $b; !$b } %k

grepp { !our $b } %k