Это будет работать только на новых версиях. Если это допустимо, то так, конечно проще и понятнее
пт, 4 окт. 2024 г., 10:02 Alessandro Gorohovski <[email protected]>: > Denis, приветствую! > > Извиняюсь за то, что отвечаю с опозданием. > Был вовне. > > Действительно Ваш код хорош при определённых условиях, > например, если передавать просто ссылку на хеш родителя > и использовать это как ядро рекурсии. > Премного благодарен. > > Только я ему сделал небольшую оптимизацию: убрал лишний внутренний цикл. > Так пожалуй прозрачнее и быстрее будет работать. > Вот что получилось: > > 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 $v; > for( %$hash ) { > return $v if \$_[ 0 ] eq \$_; > $v = $_; > } > } > > OUTPUT: > a > a > > b > b > > c > c > > > ср, 2 окт. 2024 г. в 14:18, Denis Evdokimov <[email protected]>: > >> Это? >> >> #!/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
