use strict; use warnings; use Benchmark; my @testdata; push @testdata, int rand (100) for 1..500; sub map_test { my @array = @{[ @testdata ]}; @array = sort { $a <=> $b } keys %{ { map { $_ => 0 } @array } }; 1; } sub grep_test { my %h; my @array = @{[ @testdata ]}; @array = sort {$a <=> $b} grep { ! $h{$_}++ } @array; 1; } sub do_test { my %h; my @array = @{[ @testdata ]}; @array = do { my %h; @h{ @array } = (); sort keys %h }; 1; } my $count = 1000; timethese ( $count, { 'Map' => \&map_test, 'Grep' => \&grep_test, 'Do' => \&do_test } );