#!/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);
Соответственно дает быстрый доступ к катологизированной информации.
Осталось сделать хеш любой степени вложенности для, например, хранения дерева каталогов и, скажем, базы пермишнов на файлы, если вдруг нечаянно ввел не ту команду.