#!/usr/bin/perl -w use strict; use Benchmark; my $n = 10000; my $o = rand($n); my @rray = (1..$n,$o..$n); # make an array and pollute it # with duplicates my @array = (); @array = sort {$a <=> $b} @rray; my %tests = ( totemp => sub { my @newarray = (); my $i = 0; for ( @array ){ my $temp = $array[ ++$i ] ? $array[ $i ]: ""; push @newarray, $_ unless $_ eq $temp; } }, ternary => sub { my @newarray = (); my $i = 0; for ( @array ){ push @newarray, $_ unless $_ eq $array[ $array[ $i+1 ] ? ++$i : 0 ]; } }, toend => sub { my @newarray = (); my $i = 0; for my $list (@array){ if ( $array[ ++$i ] ){ push @newarray, $list unless $list eq $array[ $i ]; }else{ push @newarray,$array[-1]; } } }, cookbook => sub { my @newarray = (); my %duplicates = (); @newarray = grep { ! $duplicates{$_} ++ } @array; }, modulus => sub { my @newarray = (); for (0..(@array-2)){ $array[$_] % $array[$_+1] and push @newarray, $array[$_]; } push @newarray, $array[-1]; }, ); timethese ( shift @ARGV || -5, \%tests);