use strict; use warnings; my @names = ('some','keys','are','redundant','keys'); my @values = (1, 3, 4, 5, 2); my %h = (); # so that the hash will be accessible outside the while loop my $i = 0; while( $i < 5 ) { # a foreach loop would've been better my $name = $names[$i]; my $value = $values[$i]; unless( defined $h{$name} and $h{$name} > $value ) { # either this is new key-value pair, # or the value is bigger than what the hash # has currently $h{$name} = $value; } $i = $i + 1; } # now print the results foreach my $key (keys %h) { # keys are in random order print "$key,$h{$key}\n"; } #### keys,3 redundant,5 are,4 some,1