### > Hi, Just trying to understand hash of hash of array. ### > my %LIS; my $pet='dog';my $x='fido'; my $y=5; my $z='male'; ### > $LIS{$pet}{$x} = [$y,$z]; ### > print "@{$LIS{$pet}{$x}}"; # ok, prints '5 male' ### > Now, suppose %LIS is populated with lots of pets. ### > How to get a list of the $z sorted on $y for the dogs ? ### > my @LIS = sort { ????? }@{$LIS{'dog'}{$x}}; ??? ### > Thanks ### ### Better invest a bit more in meaningful names and in more data: ### (I haved improved the formating a bit)
my %LIS; for ( "dog Fido 5 male ", "dog Woffo 8 male ", "cat Maunz 2 female ", "bird Pieps 1 male " ) { ($pet, $name, $age, $gender) = split; $LIS{$pet}{$name} = [$age,$gender]; } print "- - - - my HoHoL: - - - -\n"; for $keysPet(keys %LIS) { print $keysPet, "\n"; for $keysName( keys %{$LIS{$keysPet}} ) { printf " %-6s %2s %-12s \n", $keysName, $LIS{$keysPet}{$keysName}[0], $LIS{$keysPet}{$keysName}[1]; push @lis, $LIS{$keysPet}{$keysName}[0], ### (1) sprintf "\n%-6s %-6s %2s %-12s ", ### (2) $keysPet, $keysName, $LIS{$keysPet}{$keysName}[0], $LIS{$keysPet}{$keysName}[1]; } } %lis = @lis; ### (3) print "\n\n- - - - by age: - - - -\n"; for (sort(keys %lis)) { ### (4) print $lis{$_} } ### According to my present opinion I can only sort lists ### but not a wide branched, feathered, hairy hashes landscape; ### so I have to push my sort item (1) and my data (2) into an ### appropriate list (1), ### copy that list to a hash (3) and print them after sorting (4). ### ### Regards, Detlef Lindenthal