my (%seen, $string); $seen{$string}++ while $string = shift @array; for (keys %seen) {   push @array, $_;   delete $seen{$_}; }