这段代码怎么解释?

这段代码怎么解释?

下面这段代码是取出数组中重复的元素:


#!/usr/bin/perl
use warnings;
use strict;

my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %saw;
my @out = grep(!$saw{$_}++, @array);
print "@out\n";


哪位兄弟能否解释下红色部分的意思?,谢谢!


QUOTE:
原帖由 huifeideluotuo 于 2008-11-6 10:24 发表
下面这段代码是取出数组中重复的元素:


#!/usr/bin/perl
use warnings;
use strict;

my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %saw;
my @out = grep(!$saw{$_}++, @array);
p ...

循环过滤数组中重复的成员。
$_为@arrary的成员。
每次取!$saw{$_}为真的元素,判断后$saw{$_}++,下次重复时,!$saw{$_} 不为真。
取出重复的应该用

[Copy to clipboard] [ - ]
CODE:
my @out = grep($saw{$_}++, @array);

perldoc -f grep

另外,调用 grep 时其参数列表放在了括号中。
用匿名哈希就行了,不需要%saw:

my @out = keys %{{@array, reverse @array}};