@data_out = uniq(@sorted_data); sub uniq { my @xs=@_; my $x=shift @xs; return $x unless @xs; return (uniq(@xs)) if grep {substr($x,0,7) eq substr($_,0,7)} @xs; return ($x,uniq(@xs)); } #### foreach (reverse @sorted_data) { unshift(@data_out, $_) unless ($seen{substr($_,0,7)}++); } #### @data_out = nub(@sorted_data); sub nub { my @xs=@_; my $x=pop @xs; return $x unless @xs; return (nub(grep {substr($x,0,7) ne substr($_,0,7)} @xs), $x); }