use strict; use warnings; use Data::Dumper; my @array = ("M94202", "M94150", "M94297", "M94150", "M94161", "M94161", "M94162"); my %seen; my $z = 1; foreach my $item (@array) { if (exists $seen{$item}) { $item = $seen{$item}; } else { $seen{$item} = $z; $item = $z; $z += 2; } } print Dumper \@array; print "\n";