अंगूठे का नियम आपकी आवश्यकताओं के लिए उपयुक्त फ़ंक्शन का उपयोग करना है।
यदि आप केवल चाबियाँ चाहते हैं और किसी भी मान को पढ़ा कभी भी योजना बनाने की योजना नहीं बनाते हैं, तो कुंजी() का उपयोग करें:
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
}
}
यह सब perl दस्तावेज़ीकरण में वर्णित है:
% perldoc -f keys
% perldoc -f each