Aturan praktisnya adalah menggunakan fungsi yang paling sesuai dengan kebutuhan Anda.
Jika Anda hanya menginginkan kunci dan tidak berencana untuk membaca nilai apa pun, gunakan keys ():
foreach my $key (keys %hash) { ... }
Jika Anda hanya ingin nilainya, gunakan values ():
foreach my $val (values %hash) { ... }
Jika Anda membutuhkan kunci dan nilainya, gunakan each ():
keys %hash; # reset the internal iterator so a prior each() doesn't affect the loop
while(my($k, $v) = each %hash) { ... }
Jika Anda berencana untuk mengubah kunci hash dengan cara apapun kecuali untuk menghapus kunci saat ini selama iterasi, maka Anda tidak boleh menggunakan each (). Misalnya, kode ini untuk membuat satu set baru kunci huruf besar dengan nilai ganda berfungsi dengan baik menggunakan keys ():
%h = (a => 1, b => 2);
foreach my $k (keys %h)
{
$h{uc $k} = $h{$k} * 2;
}
menghasilkan hash yang diharapkan:
(a => 1, A => 2, b => 2, B => 4)
Tetapi menggunakan each () untuk melakukan hal yang sama:
%h = (a => 1, b => 2);
keys %h;
while(my($k, $v) = each %h)
{
$h{uc $k} = $h{$k} * 2; # BAD IDEA!
}
menghasilkan hasil yang salah dengan cara yang sulit diprediksi. Sebagai contoh:
(a => 1, A => 2, b => 2, B => 8)
Namun, ini aman:
keys %h;
while(my($k, $v) = each %h)
{
if(...)
{
delete $h{$k}; # This is safe
}
}
Semua ini dijelaskan dalam dokumentasi perl:
% perldoc -f keys
% perldoc -f each