> -----Original Message-----
> From: anand.jaw...@emc.com [mailto:anand.jaw...@emc.com]
> Sent: Tuesday, August 23, 2011 5:57 AM
> To: beginners@perl.org
> Subject: Hash of Hashes - Error
> 
> 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 {

Why do you have a shift here? $self usually indicates you are calling an
object method which you are not doing here. Get rid of this shift.
Looks like you were cutting and pasting some object-oriented code.

>         my $self = shift;
> 
>      my ($hash, $key_list, $callback) = @_;
> 
>      while (my ($k, $v) = each (%$hash)) {
>         push @$key_list, $k;
> 
>           if (ref($v) eq 'HASH') {

Why do you use $self? Again hash_walk is not an object method. Just call
hash_walk.

>         $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

HTH, Ken



-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to