use strict; use warnings; use Benchmark qw(cmpthese); my $startat = tell DATA; our $rsHashSlice = sub { seek DATA, $startat, 0; our @lines = ; chomp @lines; my %uniques; @uniques{@lines} = (); my @sorted; push @sorted, $_ for sort keys %uniques; return @sorted; }; our $rsSeen = sub { seek DATA, $startat, 0; my %seen; my @sorted; while () { chomp; push @sorted, $_ unless $seen{$_}++; } return @sorted; }; # For double checking results #print $rsHashSlice->(), "\n" for 1 .. 2; #print $rsSeen->(), "\n" for 1 .. 2; cmpthese(100000, { HashSlice => $rsHashSlice, Seen => $rsSeen }); __END__ black black black black black black black black black black black black black black black black blue blue blue blue blue blue blue blue blue green green green green green green green green green green grey grey grey grey iolet mauve mauve mauve mauve mauve mauve mauve mauve pink pink pink pink pink purple purple purple red red red red red red red red violet violet violet violet violet violet violet violet violet white white white white white white white yellow yellow yellow yellow yellow yellow yellow