#----------------------------- $record = { NAME => "Jason", EMPNO => 132, TITLE => "deputy peon", AGE => 23, SALARY => 37_000, PALS => [ "Norbert", "Rhys", "Phineas"], };
printf "I am %s, and my pals are %s./n", $record->{NAME}, join(", ", @{$record->{PALS}}); #----------------------------- # store record $byname{ $record->{NAME} } = $record;
# later on, look up by name if ($rp = $byname{"Aron"}) { # false if missing printf "Aron is employee %d./n", $rp->{EMPNO}; }
# give jason a new pal push @{$byname{"Jason"}->{PALS}}, "Theodore"; printf "Jason now has %d pals/n", scalar @{$byname{"Jason"}->{PALS}}; #----------------------------- # Go through all records while (($name, $record) = each %byname) { printf "%s is employee number %d/n", $name, $record->{EMPNO}; } #----------------------------- # store record $employees[ $record->{EMPNO} ] = $record;
# lookup by id if ($rp = $employee[132]) { printf "employee number 132 is %s/n", $rp->{NAME}; } #----------------------------- $byname{"Jason"}->{SALARY} *= 1.035; #----------------------------- @peons = grep { $_->{TITLE} =~ /peon/i } @employees; @tsevens = grep { $_->{AGE} == 27 } @employees; #----------------------------- # Go through all records foreach $rp (sort { $a->{AGE} <=> $b->{AGE} } values %byname) { printf "%s is age %d./n", $rp->{NAME}, $rp->{AGE}; # or with a hash slice on the reference printf "%s is employee number %d./n", @$rp{'NAME','EMPNO'}; } #----------------------------- # use @byage, an array of arrays of records push @{ $byage[ $record->{AGE} ] }, $record; #----------------------------- for ($age = 0; $age <= $#byage; $age++) { next unless $byage[$age]; print "Age $age: "; foreach $rp (@{$byage[$age]}) { print $rp->{NAME}, " "; } print "/n"; } #----------------------------- for ($age = 0; $age <= $#byage; $age++) { next unless $byage[$age]; printf "Age %d: %s/n", $age, join(", ", map {$_->{NAME}} @{$byage[$age]});
} #-----------------------------
|