Perlでリスト内の同じ値を取り除きたい場合は、ハッシュを使えば簡単にできます。
my @array = qw(a b a d d d c);
my %hash = ();
foreach (@array) {
$hash{$_}++;
}
my @unique = keys %hash;
foreach 内の $hash{$_}++ は 重複をカウントしていますが、$hash{$_}=1 で重複をカウント
しなくてもよいですね。
重複を取り除く方法は、perlfaq に、いくつか方法が記載されています。
%perldoc -q duplicate
mapを用いた方法
my %hash = map { $_, 1 } @array;
my @unique = keys %hash;
ハッシュスライスを用いた方法
my %hash;
@hash{ @array } = ();
my @unique = keys %hash;
foreachを用いた方法
$hash{$_} = 1 foreach ( @array );
my @unique = keys %hash;
grepを用いた方法
my %hash = ();
my @unique = grep { ! $hash{ $_ }++ } @array;
普段 perlfaqをみることはなく、すぐGoogle検索に頼ってしまうのですが、
perlfaqは色々なノウハウが詰まっていることを改めて感じました。
関連書籍
初めてのPerl 第5版/Randal L. Schwartz
¥3,780
Amazon.co.jp
初心者にもわかりやすく書かれていますが、
全くの初心者というより、少しPerlに慣れてきた時に威力を発揮する本です。
簡単なテキスト操作のためにPerlを使用するのであれば十分事足ると思います。
プログラミングPerl〈VOLUME1〉/ラリー ウォール
¥5,565
Amazon.co.jp
ページ数も多く、価格もそれなりなので、Perlについて詳しく知りたい人向けです。
"初めてのPerl"と重複する箇所も多々あるので、これからがっちりPerlを身につけたい人は
こちらをおすすめします。