1

この 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)
4

2 に答える 2

2

List::Pairwise は変数$aを設定$bし、呼び出し元のパッケージに含めます。

を使用することmy $bで、代わりにレキシカル変数にアクセスするようコールバックに指示します$::b

を削除する以外にmy $b、変数の完全な名前を使用するか、レキシカル ディレクティブを作成してパッケージ変数にアクセスできます。

grepp { !$::b } %k

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

grepp { !our $b } %k
于 2013-09-11T23:27:47.493 に答える
2

$a変数をレキシカライズすることはできず$bmyまたはそれらは魔法を失います。$aとは実際には特別なパッケージ変数であり、や$bのような関数で使用するために宣言する必要はありません。それらを宣言すると、それらに依存する関数は期待どおりに動作しません。sortList::Pairwise::mapp

于 2013-09-11T21:26:29.410 に答える