Вообще то передаётся ссылка (фактически адрес)

 \%{ $h{aa} }

, а не просто значение.

вт, 1 окт. 2024 г. в 14:37, Коваль Вячеслав <[email protected]>:

> Для решения задачи все равно нужен доступ к исходному хэшу, т.к. в
> изначальном коде мы передаем уже обращаемся по ключу и в функцию уже
> передается значение, т.е. какой-то хэш или массив или значение. А чтобы
> получить ключ, то нужно рекурсивно пройтись по исходному хэшу и сравнить
> Scalar::Util::refaddr всех значений с исходным.
>
> ----------------
> 01.10.2024, 13:47, "Alessandro Gorohovski via Moscow-pm" <[email protected]
> >:
> Кому: Moscow.pm group ([email protected]);
> Копия: Alessandro Gorohovski ([email protected]);
> Тема: [Moscow.pm] Узнать родительский ключ по ссылке;
>
>
> Нет, это не вариант.
> Функция не знает о хеше %h и его структуре, совсем не знает :)
>
> Представьте, что этот хеш может быть не 2х уровневый, а
> много-много-вложенный по уровням
> и
> $ref eq $value
> может случится на другом уровне.
>
>
> вт, 1 окт. 2024 г. в 13:03, Steffen Winkler via Moscow-pm <
> [email protected]>:
>
> use strict;
> use warnings;
>
> my %h = ( a => { b=> 1}, aa=> {bb=>2, }, );
>
> sub where_key {
>      my $ref = shift;
>
>      while ( my ($key, $value) = each %h ) {
>          $ref eq $value
>               and return $key;
>      }
>
>      return;
> }
>
> my $k = where_key( $h{aa} );
> print $k;
> exit;
>
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>
> ,--
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>
>
>
>
>
> --
> Яндекс.Почта — надёжная почта
> http://mail.yandex.ru/neo2/collect/?exp=1&t=1
>
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить