use strict; use warnings; use Benchmark q{cmpthese}; my @arr = ( q{a} .. q{z} ) x 1_000; cmpthese( -10, { useGrep => sub { my %seen; my @out = grep { !$seen{$_}++ } @arr; return @out; }, useSlice => sub { my %seen; @seen{@arr} = (); my @out = keys %seen; return @out; }, useRef => sub { my @out = keys %{ { map { $_ => undef } @arr } }; return @out; }, } );