|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 28 Feb 2003 15:06:50 To : Konstantin Dolgan Subject : Re: Hashes as keys -------------------------------------------------------------------------------- Konstantin Dolgan wrote: > > Можно ли сделать что-то подобное? > Имеется: > > my $hash1 = { > { 'name' => 'ivanov', > 'mail' => 'ivan@mmm.com', > } => 1, > { 'name' => 'petrov', > 'mail' => 'petr@mmm.com', > } => 2, > }; > > my $hash2 = { 'name' => 'petrov', > 'mail' => 'petr@mmm.com' > }; > > Hадо: > вытащить из $hash1 значение с ключем $hash2, > или проверить наличие оного exists-ом. > Реально ли такое чудо? Hа "настоящих" хэшах - нереально. Читать perldoc perlref в районе: WARNING You may not (usefully) use a reference as the key to a hash. It will be converted into a string: > Пробовал "tie %$hash1, 'Tie::RefHash'" - наверное, не так пробовал: > > $hash1->{$hash2} всегда получается =1, > $hash1->{%$hash2} - всегда =undef, > а exists - всегда exists. > > То ли лыжи не едут, то ли я ....???? Боюсь что Вы. Боюсь дважды. Первый раз делая tie на уже заполненый хэш, отчего в нем ссылки уже преобразованные в строки отнюдь не исправятся обратно сами собой. Второй раз, предполагая, что если содержимое хэшей идентично (%$hash2 и анонимные хэши ссылки на которые являются ключами в %$hash1), то и ссылки на них можно использовать произвольно. Это не так. Содержимое этих хэшей никто проверять не будет, а ссылки на них не равны друг другу. Посему извлечь что либо из %$hash1 по ссылке $hash2 использованной в качестве ключа можно будет только в том случае, если мы и записывали в %$hash1 информацию используя $hash2 в качестве ключа. Безразлично, поменяли мы после этого содержимое %$hash2 или нет. Андрей P.S. Прочитать вдумчиво 2 раза. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/65772c5c73ca.html, оценка из 5, голосов 10
|