Почему только на новых? (и на сколько новых?).
On Fri, 4 Oct 2024 at 12:23, Denis Evdokimov via Moscow-pm <[email protected]> wrote: > > Это будет работать только на новых версиях. > Если это допустимо, то так, конечно проще и понятнее > > > пт, 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 -- //wbr, Dmitry L. -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
