आप हैश से अधिक पुनरावृत्ति नहीं कर रहे हैं, तो आप keys
द्वारा दिया कुंजियों की सूची पर पुनरावृत्ति कर रहे हैं इससे पहले कि आप भी पाशन क्योंकि
for my $key (keys %$hash_ref) {
...
}
लगभग एक ही
रूप
my @anon = keys %$hash_ref;
for my $key (@anon) {
...
}
है शुरू कर दिया हैश से हटने से कोई समस्या नहीं होती है।
each
, दूसरे पर, एक हैश से अधिक पुनरावृति करता है। प्रत्येक बार इसे कॉल किया जाता है, each
एक अलग तत्व देता है। फिर भी, यह अभी भी delete
वर्तमान तत्व के लिए सुरक्षित है!
# Also safe
while (my ($key) = each(%$hash_ref)) {
...
delete $hash_ref->{$key};
...
}
आप जोड़ सकते हैं या जब यह खत्म हो पुनरावृत्ति, प्रविष्टियों छोड़ दिया था या दोहराया जा सकता है एक हैश के तत्वों को हटाते हैं - ताकि ऐसा नहीं करते हैं। अपवाद: हाल ही में प्रत्येक()
शब्द "वर्तमान कार्यान्वयन में" शब्द मुझे थोड़ा डराता है, क्योंकि ऐसा लगता है कि कार्यान्वयन को बदलने के लिए वहां जगह है जैसे कि यह है अब सुरक्षित नहीं है। मैं उस पर भरोसा नहीं करता, लेकिन फिर मैं 'प्रत्येक()' का उपयोग नहीं करता - foreach कुंजी ठीक है। – LeoNerd
@LeoNerd, पुराना पर्ल (कम से कम 5.10) बस "हमेशा हटाना सुरक्षित है ..." स्पष्ट संगतता कारणों के लिए, मुझे संदेह है कि यह कभी भी 'उपयोग सुविधा' या अन्य समान प्रगति को शुरू किए बिना बदला जाएगा। –
जिन्होंने "वर्तमान कार्यान्वयन में" जोड़ा? यह हमेशा वहां नहीं था, और अब वहां नहीं होना चाहिए, जब तक कि वास्तव में वास्तव में कोई अच्छा कारण न हो। अद्यतन: अब और प्रतीत नहीं होता है। – ysth