Hi All,
I am working on the below code to traverse through a hash, but it throws an
error which states "Can't coerce array into hash at temp.pl line 6."
Code:
===============================================================
sub hash_walk {
my $self = shift;
my ($hash, $key_list, $callback) = @_;
while (my ($k, $v) = each (%$hash)) {
push @$key_list, $k;
if (ref($v) eq 'HASH') {
$self->hash_walk($v, $key_list, $callback);
}
else {
$callback->($k, \$v, $key_list);
} pop @$key_list;
$hash->{$k} = $v;
}
}
my %data = (
a => {
ab => 1,
ac => 2,
ad => {
ada => 3,
adb => 4,
adc => {
adca => 5,
adcb => 6,
},
},
},
b => 7,
c => {
ca => 8,
cb => {
cba => 9,
cbb => 10,
},
},
);
hash_walk(\%data, [], \&replace_all_val_strings);
sub replace_all_val_strings {
my ($k, $v, $key_list) = @_;
printf "k = %-8s v = %-4s key_list = [%s]\n", $k, $$v, "@$key_list";
$$v =~ s/oldstr/newstr/;
printf "k = %-8s v = %-4s key_list = [%s]\n", $k, $$v, "@$key_list";
}
===============================================================
Could anyone please help me out.
Thanks in Advance
Anand