in reply to Re: Re: Re: A hash of an array containing hashes & arrays
in thread A hash of an array containing hashes & arrays

The following is what I ended up doing. Part of the problem here was that I didn't know exactly what the data was (maintaining someone else's 12k lines of perl w/ almost no comments is a b****) and I still don't know where some of it is coming from. Any suggestions for improvement would be appreciated.

The data was arranged:
%::Volume_Info = { 0, 512, 1048576, 1, %spindles = { 0 => ARRAY 1 => ARRAY 2 => ARRAY 3 => ARRAY }, [ ARRAY ], %copy_pool = { 0 => [ ARRAY, 0, 0, 1] }, -1, 0, 0, 0, }
for my $vol_key ( keys %::Volume_Info ) { print "Volume " . ref($::Volume_Info{$vol_key}) . "\n"; foreach my $item ( $::Volume_Info{$vol_key} ) { if (ref($item) eq "ARRAY") { foreach my $item2 (@$item) { if (ref($item2) eq "ARRAY") { foreach my $ar_el (@$item2) { print "array_element: @$ar_el\n"; } } elsif (ref($item2) eq "HASH") { foreach my $hash_key (keys %$item2){ print "\t hash key: $hash_key\n"; if (ref($$item2{$hash_key}) eq "ARRAY") { foreach my $item3 ($$item2{$hash_key}) + { # if (ref($item3) eq "ARRAY") { # foreach my $an_el (@$item3) { # print "\t\t\tanother elem +ent @$an_el\n"; # } # } else { print "\t\tspindle values: @$i +tem3\n"; #} } } } } else { print "Array Item: $item2 \n"; } } } } }

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: A hash of an array containing hashes & arrays
by Bird (Pilgrim) on Aug 22, 2002 at 17:55 UTC
    Ohhhh... well if you're just trying to see what someone else's data looks like, have you considered using Data::Dumper instead? It makes something like that very easy.
    use Data::Dumper; my %Volume_Info = ( alpha => [ 0, 512, 1048576, 1, { one => 'first_hash' }, [ 'two', 'first_array' ], { three => 'second_hash' }, -1, 0, 'zfod', 0 ], beta => [ 1, 2, { four => 'third_hash' }, 2, 1 ] ); print Dumper(\%Volume_Info);
    ...which produces...
    $VAR1 = { 'beta' => [ 1, 2, { 'four' => 'third_hash' }, 2, 1 ], 'alpha' => [ 0, 512, 1048576, 1, { 'one' => 'first_hash' }, [ 'two', 'first_array' ], { 'three' => 'second_hash' }, -1, 0, 'zfod', 0 ] };
    Not sure if this fits your purposes, but I felt it was worth mentioning (especially after misleading you with my first response).

    -Bird

      Never tried Data::Dumper before. Looks like it is exactly what I am looking for. Thanks

      --ERick