Hash-SafeKeys

Every hash variable in Perl has its own internal iterator,
accessed by the builtin C<each>, C<keys>, and C<values>
functions. The iterator is also implicitly used whenever
the hash is evaluated in list context.  The iterator is
"reset" whenever C<keys> or C<values> 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<while ... each> 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<Hash::SafeKeys> 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.