#!/usr/bin/perl foreach $lett(qw(meat beer)){ foreach $num(qw(war peace)){ foreach $tes(qw(one two)){ foreach $users(qw(bred pitt)){ @{$hhh{$lett}{$num}{$tes}{$users}}=qw(beer vodka); } } } } print "hash\tsubhash\t subsubhash\tmassives\n"; for $let(sort keys %hhh) { print "hash $let: (\n"; for $nums (sort keys %{$hhh{$let}}) { print "\tsubhash $nums (\n\t"; for $ltr(sort keys %{$hhh{$let}{$nums}}){ print "\tsubsubhash $ltr (\n\t"; for $aa(sort keys %{$hhh{$let}{$nums}{$ltr}}){ print "\t\t'$aa' => [ "; print join " | " => @{$hhh{$let}{$nums}{$ltr}{$aa}}; print " ]\n\t"; } print ")\n\t"; } print " \t)\n"; } print ")\n"; } ** Joe's Own Editor v2.8l ** Copyright (C) 1995 Joseph H. Allen ** File hhhsh.pl not changed so no update needed. bash-2.05$ ./hhhsh.pl | less hash subhash subsubhash massives hash beer: ( subhash peace ( subsubhash one ( 'bred' => [ beer | vodka ] 'pitt' => [ beer | vodka ] ) subsubhash two ( 'bred' => [ beer | vodka ] 'pitt' => [ beer | vodka ] ) ) subhash war ( subsubhash one ( 'bred' => [ beer | vodka ] 'pitt' => [ beer | vodka ] ) subsubhash two ( 'bred' => [ beer | vodka ] 'pitt' => [ beer | vodka ] ) ) ) hash meat: ( subhash peace ( subsubhash one ( 'bred' => [ beer | vodka ] 'pitt' => [ beer | vodka ] ) subsubhash two ( 'bred' => [ beer | vodka ] 'pitt' => [ beer | vodka ] ) ) subhash war ( subsubhash one ( 'bred' => [ beer | vodka ] 'pitt' => [ beer | vodka ] ) subsubhash two ( 'bred' => [ beer | vodka ] 'pitt' => [ beer | vodka ] ) ) ) bash-2.05$
Хеши можно строить любой степени вложенности просто прибавляя лишний цикл и лишнюю пару фигурных скобок в $hhh{$lett}{$num}{$tes}{$users}, т.е. $hhh{$lett}{$num}{$tes}{$users}{$dream} уже будет хешем хешей хешей хешей хешей т.д.
А в конце, используя оператор @{а тут хеш хешей хешей хешей хешей ... n+1 ...}=qw(blah blah blah) можно приспособить хешn массивов. Итого это будет выглядеть так:
@{$hhh{$lett}{$num}{$tes}{$users}}=qw(beer vodka);
Соответственно дает быстрый доступ к катологизированной информации.
Осталось сделать хеш любой степени вложенности для, например, хранения дерева каталогов и, скажем, базы пермишнов на файлы, если вдруг нечаянно ввел не ту команду.