你知道这段代码在做什么吗?
my(%p,%q);
grep {$p{$_}++} @{$_[0]};
grep {$q{$_}++} @{$_[1]};
[grep {$p{$_} and !$q{$_}} keys %p];
我有点将这段代码翻译成.Net,但我不完全确定这是做什么的,这个子例程要求2个参数,在我工作的情况下,2个哈希表。< / p>
如果您需要更多信息,请告诉我
答案 0 :(得分:3)
这是一个函数的主体,它接受两个数组引用作为参数。然后它返回一个数组引用,该引用包含第一个数组中不在第二个数组中的唯一值。
鉴于新数组正在迭代%p
的键,实际上不必在$p{$_}
中包含grep
测试。
总的来说,我可能会按如下方式重写sub:
my ($array1, $array2) = @_;
my %in_array2 = map {$_ => 1} @$array2;
my %seen;
return [grep {!$in_array2{$_} && !$seen{$_}++} @$array1]