summaryrefslogtreecommitdiff
path: root/pod/perlfaq4.pod
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>2004-11-17 10:22:52 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2004-11-17 10:22:52 +0000
commit28b41a8090d259cff9b1dd87c0c53b3c4a31e822 (patch)
tree82cf112c535e471ad21a6b91f9a020115eb7a66d /pod/perlfaq4.pod
parent4cdaeff7d67594a60bccc7882d3197ee0420932d (diff)
downloadperl-28b41a8090d259cff9b1dd87c0c53b3c4a31e822.tar.gz
PerlFAQ sync.
p4raw-id: //depot/perl@23509
Diffstat (limited to 'pod/perlfaq4.pod')
-rw-r--r--pod/perlfaq4.pod20
1 files changed, 8 insertions, 12 deletions
diff --git a/pod/perlfaq4.pod b/pod/perlfaq4.pod
index 0e62c2b436..815a9ea428 100644
--- a/pod/perlfaq4.pod
+++ b/pod/perlfaq4.pod
@@ -1,6 +1,6 @@
=head1 NAME
-perlfaq4 - Data Manipulation ($Revision: 1.55 $, $Date: 2004/10/11 05:06:29 $)
+perlfaq4 - Data Manipulation ($Revision: 1.56 $, $Date: 2004/11/03 22:47:56 $)
=head1 DESCRIPTION
@@ -1715,19 +1715,15 @@ sorting the keys as shown in an earlier question.
=head2 What happens if I add or remove keys from a hash while iterating over it?
-Don't do that. :-)
+(contributed by brian d foy)
-[lwall] In Perl 4, you were not allowed to modify a hash at all while
-iterating over it. In Perl 5 you can delete from it, but you still
-can't add to it, because that might cause a doubling of the hash table,
-in which half the entries get copied up to the new top half of the
-table, at which point you've totally bamboozled the iterator code.
-Even if the table doesn't double, there's no telling whether your new
-entry will be inserted before or after the current iterator position.
+The easy answer is "Don't do that!"
-Either treasure up your changes and make them after the iterator finishes
-or use keys to fetch all the old keys at once, and iterate over the list
-of keys.
+If you iterate through the hash with each(), you can delete the key
+most recently returned without worrying about it. If you delete or add
+other keys, the iterator may skip or double up on them since perl
+may rearrange the hash table. See the
+entry for C<each()> in L<perlfunc>.
=head2 How do I look up a hash element by value?