#!/usr/bin/perl -w
BEGIN { $^W = 1 }
use strict;
my %lis; #age sex
$lis{cat}{Zoe}=["9","female"];
$lis{dog}{Max}=["8","male"];
$lis{pig}{Joe}=["6","barrow"];
$lis{cat}{Sam}=["1","female"];
$lis{dog}{Bob}=["2","male"];
$lis{cat}{Kat}=["5","female"];
$lis{pig}{Sly}=["7","barrow"];
$lis{cat}{Tom}=["1","male"];
$lis{pig}{Zig}=["3","barrow"];
print "-"x32,"\n";
my %h;
for my $i (keys %lis){
for my $j (keys %{$lis{$i}}){
my $s = ", a pet $i named $j; ";
$h{${$lis{$i}{$j}}[1]}{${$lis{$i}{$j}}[0]}{$s}++;
} #sex age
}
for my $h (sort { $a cmp $b } keys %h){
print "sex $h: ";
for my $i (sort {$a <=> $b} keys %{$h{$h}}){
print "age $i";
for my $s (sort keys %{$h{$h}{$i}}){
print "$s";
}
}
print "\n";
}
#END
=begin comment text
Subject: [MacPerl] at a loss with hashes
Date: Mon, 20 Jan 2003 03:01:10 +0100 (MET)
From: Louis Pouzin <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
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
=end comment text