Hashes of hashes:
%h = ( "1d" => { name => "MOT1"}, "2d" => { name => "MOT2"}, "3d" => { name => "MOT3"}); print "Motor " . $h{ "2d"}{ name} . "\n"; # prints 'MOT1'
The following example demonstrates how array references can be stored in hashes:
%sue = ( name => 'Sue', age => 45); # parent %john = ( name => 'John', age => 20); # child %peggy = ( name => 'Peggy', age => 16); # child @children = (\%john, \%peggy); $sue{ children} = \@children; # or $sue{ children} = [\%john, \%peggy]; print "Peggy's age: " . $sue{ children}->[ 1]->{ age} . "\n"; print "Peggy's age: " . $sue{ children}[ 1]{ age} . "\n"; # shortcut # # implicit creation of complex data structures: the following # statement is valid without any preceding initialization of # the data structure # $sue{children}[1]{age} = 10; # # using anonymous arrays # %sue = ( name => 'Sue', age => 45, children => [ { name => 'John', age => 20}, { name => 'Peggy', age => 16}, ], )
Here is an example for a data record:
$rec = { TEXT => $string, SEQUENCE => [ @old_values ], LOOKUP => [ %some_table], THATCODE => \&some_function, THISCODE => sub { $_[0] ** $_[1]}, HANDLE => \*STDOUT, } print $rec->{ TEXT}; print $rec->{ SEQUENCE}[ 0]; print $rec->{ LOOKUP}{ "key"}; ($first_k, $first_v) = each %{ $rec->{ LOOKUP}}; $answer = &{ $rec->{ THATCODE}} ( $arg); $answer = &{ $rec->{ THISCODE}} ( $arg1, $arg2); print { $rec->{ HANDLE} } "a string\n";