my @list = qw( one two three one ); @list = make_unique( @list ); sub make_unique { my @list = @_; my %seen; my @new_list; foreach my $item ( @list ) { if ( not defined $seen{$item} ) { $seen{$item} = 1; push @new_list, $item; } else { push @new_list, $item . '_' . $seen{$item}; $seen{$item}++; } } return @new_list; }