my $first = 1; for my $n (sort { $hash{$a} <=> $hash{$b} } keys %hash){ if ($first) { $first = 0; next; } ... } #### my @names_by_val = sort { $hash{$a} <=> $hash{$b} } keys %hash; shift(@names_by_val); for my $n (@names_by_val) { ... } #### my @names_by_val = sort { $hash{$a} <=> $hash{$b} } keys %hash; for my $n (@names_by_val[1..$#names]) { ... } #### my %hash; foreach my $n (@names){ my $r = int(rand($range))+$min; $hash{$n}=$r; } my @names_by_val = sort { $hash{$a} <=> $hash{$b} } keys %hash; #### use List::Util qw( shuffle ); my @shuffled_names = shuffle @names;