Hash-SafeKeys Every hash variable in Perl has its own internal iterator, accessed by the builtin C, C, and C functions. The iterator is also implicitly used whenever the hash is evaluated in list context. The iterator is "reset" whenever C or C is called on a hash, including the implicit calls when the hash is evaluated in list context. That makes it dangerous to do certain hash operations inside a C loop: while (my($k,$v) = each %hash) { ... @k = sort keys %hash; # Infinite loop! @v = grep { /foo/ }, values %hash; # Ack! print join ' ', %hash; # Run away! } C provides alternate functions to access the keys, values, or entire contents of a hash in a way that does not reset the iterator, making them safe to use in such contexts: while (my($k,$v) = each %hash) { ... @k = sort safekeys %hash; # Can do @v = grep { /foo/ }, safevalues %hash; # No problem print join ' ', safecopy %hash; # Right away, sir } INSTALLATION To install this module, run the following commands: perl Makefile.PL make make test make install SUPPORT AND DOCUMENTATION After installing, you can find documentation for this module with the perldoc command. perldoc Hash::SafeKeys You can also look for information at: RT, CPAN's request tracker (report bugs here) http://rt.cpan.org/NoAuth/Bugs.html?Dist=Hash-SafeKeys AnnoCPAN, Annotated CPAN documentation http://annocpan.org/dist/Hash-SafeKeys CPAN Ratings http://cpanratings.perl.org/d/Hash-SafeKeys Search CPAN http://search.cpan.org/dist/Hash-SafeKeys/ LICENSE AND COPYRIGHT Copyright (C) 2012-2016 Marty O'Brien This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information.