Это?

#!/usr/bin/perl
use 5.10.0;
use strict;
use warnings;
use utf8;
use open qw(:std :utf8);

my %h = ( a => 1, b => 1, c => 1 );

say "a";
say findHashKey( \%h, $h{ a } );
say "";
say "b";
say findHashKey( \%h, $h{ b } );
say "";
say "c";
say findHashKey( \%h, $h{ c } );

################################################################################
sub findHashKey {
    my $hash     = shift;
    my $valueRef = \$_[ 0 ];

    my $key;
    my $i = 0;
    foreach ( values %$hash ) {
        if ( $valueRef eq \$_ ) {
            foreach ( keys %$hash ) {
                $i-- == 0 or next;
                $key = $_;
                last;
            }
            last;
        }
        else {
            ++$i;
        }
    }
    return $key;
}
################################################################################

ср, 2 окт. 2024 г. в 14:17, Denis Evdokimov <[email protected]>:

> Это?
>
> ср, 2 окт. 2024 г. в 09:22, Alessandro Gorohovski via Moscow-pm <
> [email protected]>:
>
>> Жаль, что не совсем по subject,
>> но спасибо за "пищу для размышлений".
>>
>>
>> вт, 1 окт. 2024 г. в 23:15, Alexander Batyrshin <[email protected]>:
>>
>>> Когда-то давно я юзала https://metacpan.org/pod/Data%3A%3AFind для
>>> поиска в сложных вложенных структурах.
>>>
>>>
>>>
>>> On 1 Oct 2024, at 12:34, Alessandro Gorohovski via Moscow-pm <
>>> [email protected]> wrote:
>>>
>>> Уважаемое сообщество, приветствую!
>>>
>>> Подскажите, может кто-нибудб знает/сталкивался:
>>> существует ли способ узнать родительский ключ хеша по ссылке?
>>>
>>> # Например, есть хеш
>>> my %h = ( a => { b=> 1}, aa=> {bb=>2, }, );
>>>
>>> # вызов функции, где необходимо узнать родительский ключ
>>> # например, 'aa'
>>> my $k = &where_key( \%{ $h{aa} } );
>>>
>>> exit;
>>>
>>> sub where_key {
>>>   my $sh = shift;
>>>
>>>   my $k =  ??? if ref( $sh ) eq 'HASH';
>>>
>>>   return $k;
>>> }
>>> --
>>> Moscow.pm mailing list
>>> [email protected] | http://moscow.pm.org
>>>
>>>
>>> --
>> Moscow.pm mailing list
>> [email protected] | http://moscow.pm.org
>>
>
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить