my @arr = qw(b a a c d g e f); my %hash; @hash{@arr}=(); say keys %hash;
您也可以使用模块,例如List::MoreUtils
use strict; use warnings; use List::MoreUtils qw(uniq); print join ":",uniq qw(a a a b b c d);
输出:
a:b:c:d
my @arr = keys { map { $_ => 1 } qw(b a a c d g e f) };
花括号为键创建一个匿名哈希,map语句创建一个键/值对列表.
my @arr = dedupe(qw(a a b c d d e)); sub dedupe { my %hash = map { $_ => 1 } @_; return keys %hash; }
同样的事情,但在子程序形式,并分成两行.请注意,两个列表将按半随机顺序排列,因为哈希值是无序的.
List :: MoreUtils使用的子程序同样简单,也许更可取,因为它将保留参数的顺序.但它仍然使用哈希.
sub uniq { my %seen = (); grep { not $seen{$_}++ } @_; }