अंगूठे का नियम आपकी आवश्यकताओं के लिए सबसे उपयुक्त फ़ंक्शन का उपयोग करना है।
यदि आप केवल कुंजियाँ चाहते हैं और किसी भी मान को पढ़ने की योजना नहीं बनाते हैं, तो कुंजियों का उपयोग करें ():
foreach my $key (keys %hash) { ... }
यदि आप केवल मान चाहते हैं, तो मानों का उपयोग करें ():
foreach my $val (values %hash) { ... }
यदि आपको कुंजी और मान चाहिए, तो प्रत्येक का उपयोग करें ():
keys %hash; # reset the internal iterator so a prior each() doesn't affect the loop
while(my($k, $v) = each %hash) { ... }
यदि आप पुनरावृत्ति के दौरान वर्तमान कुंजी को हटाने के अलावा किसी भी तरह से हैश की चाबियाँ बदलने की योजना बनाते हैं , तो आपको प्रत्येक () का उपयोग नहीं करना चाहिए। उदाहरण के लिए, दोगुने मूल्यों के साथ अपरकेस कुंजी का एक नया सेट बनाने के लिए यह कोड कुंजियों का उपयोग करके ठीक काम करता है ():
%h = (a => 1, b => 2);
foreach my $k (keys %h)
{
$h{uc $k} = $h{$k} * 2;
}
अपेक्षित हैश का उत्पादन:
(a => 1, A => 2, b => 2, B => 4)
लेकिन एक ही काम करने के लिए प्रत्येक () का उपयोग करना:
%h = (a => 1, b => 2);
keys %h;
while(my($k, $v) = each %h)
{
$h{uc $k} = $h{$k} * 2; # BAD IDEA!
}
कठिन-से-पूर्वानुमान तरीकों से गलत परिणाम उत्पन्न करता है। उदाहरण के लिए:
(a => 1, A => 2, b => 2, B => 8)
यह, हालांकि, सुरक्षित है:
keys %h;
while(my($k, $v) = each %h)
{
if(...)
{
delete $h{$k}; # This is safe
}
}
यह सब पर्ल दस्तावेज़ में वर्णित है:
% perldoc -f keys
% perldoc -f each