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

Reply via email to