2015-09-06 51 views

回答

6

當您循環使用這些值時,您無法訪問該密鑰。

for my $key (keys %hash) { 
    if ($hash{$key} > $ARGV[1]) { 
     $counter = $counter + 1; 
     print "$key\n"; 
    } 
} 
print "$counter\n"; 

keys %hash; # reset iterator 
while (my ($key, $value) = each %hash) { 
    if ($value > $ARGV[1]) { 
     $counter = $counter + 1; 
     print "$key\n"; 
    } 
} 
print "$counter\n"; 
0

,你不能訪問給定其價值的哈希元的密鑰。畢竟,多個鍵可能具有相同的值。但你可以依靠Perl爲您提供的鍵的順序與值相同。所以,你可以寫這樣的事情

use strict; 
use warnings; 

my @keys = keys %hash; 
my @vals = values %hash; 
my $count = 0; 

for my $val (@values) { 
    my $key = shift @keys; 
    if ($val > $ARGV[1]) { 
     ++$count; 
     print $key, "\n"; 
    } 
} 

print "$count\n"; 

但是,這將是更好的選擇使用while循環與each同時

while (my ($key, $val) = each %hash) { 
    if ($val > $ARGV[1]) { 
     ++$count; 
     print $key, "\n"; 
    } 
} 
收集兩個鍵和值