关于grep和dereference的怀疑

时间:2014-04-10 05:49:05

标签: perl grep dereference

你知道这段代码在做什么吗?

my(%p,%q);
grep {$p{$_}++} @{$_[0]};
grep {$q{$_}++} @{$_[1]};
[grep {$p{$_} and !$q{$_}} keys %p];

我有点将这段代码翻译成.Net,但我不完全确定这是做什么的,这个子例程要求2个参数,在我工作的情况下,2个哈希表。< / p>

如果您需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:3)

这是一个函数的主体,它接受两个数组引用作为参数。然后它返回一个数组引用,该引用包含第一个数组中不在第二个数组中的唯一值。

鉴于新数组正在迭代%p的键,实际上不必在$p{$_}中包含grep测试。

总的来说,我可能会按如下方式重写sub:

my ($array1, $array2) = @_;

my %in_array2 = map {$_ => 1} @$array2;

my %seen;

return [grep {!$in_array2{$_} && !$seen{$_}++} @$array1]