#!perl -w use strict; use Benchmark ':all'; our @unsorted = map { join('', map { ('a'..'z','A'..'Z',0..9)[rand 62] } 1..50) } 1..5000; sub uniq_dragonchild { my %x; @x{@_} = @_; values %x } sub uniq_BrowserUk { my %x; @x{@_} = (); keys %x } sub uniq_Zaxo { keys %{ { map { $_ => undef } @_ } } } sub uniq_Roy { my %x; grep {!$x{$_}++} @_ } our( @a, @b, @c, @d ); cmpthese( -1, { uniq_dragonchild => '@a = uniq_dragonchild( @unsorted )', uniq_BrowserUk => '@b = uniq_BrowserUk( @unsorted )', uniq_Zaxo => '@c = uniq_Zaxo(@unsorted)', uniq_Roy => '@d = uniq_Roy( @unsorted )', }); #my $a='a'; print $/, $a++, ' : ', "@{[ sort @$_ ]}" for ( \@a, \@b, \@c, \@d ); __END__ P:\test>363760 Rate uniq_dragonchild uniq_Zaxo uniq_Roy uniq_BrowserUk uniq_dragonchild 18.1/s -- -21% -31% -41% uniq_Zaxo 22.8/s 26% -- -13% -25% uniq_Roy 26.3/s 45% 15% -- -14% uniq_BrowserUk 30.6/s 69% 34% 16% --