Perl | сортировка вложенных хешей

программирование perl

Добрый день,

Стыдно признаться, но не могу сообразиьб как сделать красиво и оптимально =)
есть хеш %USERS примерно такой структуры

$VAR1= 'aks';
$VAR2= {
'mobile' => '9',
'roomNumber' => '609',
'departmentNumber' => '123',
'mail' => '[email protected]',
'homePhone' => '123456',
'title' => 'Ведущий спец',
'displayName' => 'Ашурбанипал Калиострович Сискаридзе'
};
$VAR3= 'malt';
$VAR4= {
'businessCategory' => 'Экономический отдел',
'roomNumber' => '3-1',
'departmentNumber' => '168',
'title' => 'Экономист по бухгалтерскому учету и анализу хозяйственной деятельности',
'mail' => '[email protected]',
'displayName' => 'Максимова Анастасия Теодоровна'
};
...

т.е. $USERS{login}{поле}
самих полей много и у всех разные, большинство конечно присутствуют у всех. Хочу иметь возможность выводить с сортировкой по полям displayName, ну и roomNumber.. по умолчанию выводится как попало

foreach my $login (keys %USERS)
{
foreach my $field (keys %{$USERS{$login}} )
{
print $USERS{$login}{'displayName'}.'-' if ($field eq 'displayName');
}
print "\n";
}

пытался типа свою сортировку подсунуть во второй цикл, но все тщетно, да и неудивительно, в момент работы второго цикла он же знает только о текущем юзере ($login из первого цикла)

foreach my $login (keys %USERS)
{
foreach my $field (sort {($a eq $b) && ($a=~/displayName/i) && ($USERS{$login}{$a} cmp $USERS{$login}{$b})} keys %{$USERS{$login}} )
{
print $USERS{$login}{'displayName'}.'-' if ($field eq 'displayName');
}
print "\n";
}

Короче, как универсально сделать, чтобы сортировать по разным полям.. достаточно просто printом выплюнуть..</lj-cut>
Ответы:
foreach my $login ( sort { $USERS{$a}{displayName} cmp $USERS{$b}{displayName} } keys %USERS ) {
  ля-ля-тополя
}


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.