Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > вложенные хэши


Автор: achmed 15.4.2004, 13:36
Здравствуйте!
Допустим в мою функцию передается хэш произвольной вложенности (например это элементы меню,которые нужно отобразить на веб-странице), мне нужно пройтись по всем элементам, при этом нужно различать на текущем шаге обхода что соответсвует ключу - скаляр или очередной хеш. Вопрос как лучше поступить c точки зрения стиля, определять наличие хэша при помощи ref, или передавать информацию о структуре самом хэше (например с ключами -value,-childs).

т.е в первом случае

fun printmenu
{
my $menu = shift;
foreach $i (keys %$menu)
{
if(ref($i) eq HASH)
{
........
}
else
{
.......
}
}
}
..
printmenu({"гостевая страница"=> "/quest/","новости" => {"лента"=>"/news/line/","подписка"=>"/news/sub/"}});

или

fun printmenu
{
my $menu = shift;
foreach $i (@$menu)
{
if(defined $i->{-childs})
{
........
}
else
{
.......
}
}
}
.....
printmenu([{-name=>"гостевая страница",-val=> "/quest/"},
{-name=>"новости",-childs => [{-name=>"лента",-val=>"/news/line/}",{-name=>"подписка",-val=>"/news/sub/"}]}]);




Автор: HalkaR 18.4.2004, 19:04
ИМХО, в данном случае рекурсивный алгоритм с проверкой на хеш оптимален.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)