diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2004-11-17 10:22:52 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2004-11-17 10:22:52 +0000 |
commit | 28b41a8090d259cff9b1dd87c0c53b3c4a31e822 (patch) | |
tree | 82cf112c535e471ad21a6b91f9a020115eb7a66d /pod/perlfaq4.pod | |
parent | 4cdaeff7d67594a60bccc7882d3197ee0420932d (diff) | |
download | perl-28b41a8090d259cff9b1dd87c0c53b3c4a31e822.tar.gz |
PerlFAQ sync.
p4raw-id: //depot/perl@23509
Diffstat (limited to 'pod/perlfaq4.pod')
-rw-r--r-- | pod/perlfaq4.pod | 20 |
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? |