In continue to the discussion here, I'm havind some trouble with lock_hash_recurse
as illustrated below:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Hash::Util qw (lock_keys);
my $hashref = {A=>1, B=>{CC=>22, DD=>33}};
lock_keys(%{$hashref}); # this is OK
Hash::Util::lock_hash_recurse(%{$hashref}); # this fails: "Use of uninitialized value in string eq at /usr/lib/perl/5.10/Hash/Util.pm line 153."
From what I can tell, reftype
returns undef
... is that a bug in lock_hash_recurse
(maybe that's why it isn't exported?...)
It is a bug in
Hash::Util
. The code says:but should be:
The problem is that
Scalar::Util::reftype
returnsundef
, not an empty string. A patch has been sent to p5p. It doesn't look likeHash::Util
is a dual-life (in core and CPAN) module, so you would have to upgrade to a version of Perl 5 with it fixed. I would suggest either patching the code yourself or writing your own version.If you write your own version, do not use Internals::SvREADONLY (user level stuff shouldn't use the stuff in the
Internals
package). Use theReadonly::XS
module instead.