my %b; foreach (@a) { $b{$_} = 1 if defined $_ } #### use Benchmark ':all'; my @a; push @a, rand(500) for (0..1000); #build array $a[int(rand(1000))] = undef; #delete an element (sort of) $a[int(rand(1000))] = undef; #delete an element (sort of) cmpthese( 1_000, { 'map' => sub { my %b = map{ $_ => 1 } @a }, 'foreach' => sub { my %b; foreach(@a) { $b{$_} = 1 if defined $_ } }, }); __END__ Rate map foreach map 374/s -- -44% foreach 673/s 80% --