<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:large">Denis, приветствую!</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Извиняюсь за то, что отвечаю с опозданием. </div><div class="gmail_default" style="font-size:large">Был вовне.</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Действительно Ваш код хорош при определённых условиях, </div><div class="gmail_default" style="font-size:large">например, если передавать просто ссылку на хеш родителя </div><div class="gmail_default" style="font-size:large">и использовать это как ядро рекурсии.</div><div class="gmail_default" style="font-size:large">Премного благодарен.<br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Только я ему сделал небольшую оптимизацию: убрал лишний внутренний цикл.</div><div class="gmail_default" style="font-size:large">Так пожалуй прозрачнее и быстрее будет работать.</div><div class="gmail_default" style="font-size:large">Вот что получилось:</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large"><span style="font-size:small">my %h = ( a => 1, b => 1, c => 1 );</span><br style="font-size:small"><span style="font-size:small">say "a";</span><br style="font-size:small"><span style="font-size:small">say findHashKey( \%h, $h{ a } );</span><br style="font-size:small"><span style="font-size:small">say "";</span><br style="font-size:small"><span style="font-size:small">say "b";</span><br style="font-size:small"><span style="font-size:small">say findHashKey( \%h, $h{ b } );</span><br style="font-size:small"><span style="font-size:small">say "";</span><br style="font-size:small"><span style="font-size:small">say "c";</span><br style="font-size:small"><span style="font-size:small">say findHashKey( \%h, $h{ c } );</span><br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large"><span style="background-color:rgb(217,234,211)">sub findHashKey {<br> my $hash  = shift;<br><br> my $v;<br> for( %$hash ) {<br>    return $v if \$_[ 0 ] eq \$_;<br>    $v = $_;<br>  }<br>}</span><br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">OUTPUT:</div><div class="gmail_default" style="font-size:large">a<br>a<br><br>b<br>b<br><br>c<br>c<br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large"><br></div></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">ср, 2 окт. 2024 г. в 14:18, Denis Evdokimov <<a href="mailto:evdokimov.denis@gmail.com">evdokimov.denis@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Это?</div><div><br></div><div>#!/usr/bin/perl<br>use 5.10.0;<br>use strict;<br>use warnings;<br>use utf8;<br>use open qw(:std :utf8);<br><br>my %h = ( a => 1, b => 1, c => 1 );<br><br>say "a";<br>say findHashKey( \%h, $h{ a } );<br>say "";<br>say "b";<br>say findHashKey( \%h, $h{ b } );<br>say "";<br>say "c";<br>say findHashKey( \%h, $h{ c } );<br><br>################################################################################<br>sub findHashKey {<br>    my $hash     = shift;<br>    my $valueRef = \$_[ 0 ];<br><br>    my $key;<br>    my $i = 0;<br>    foreach ( values %$hash ) {<br>        if ( $valueRef eq \$_ ) {<br>            foreach ( keys %$hash ) {<br>                $i-- == 0 or next;<br>                $key = $_;<br>                last;<br>            }<br>            last;<br>        }<br>        else {<br>            ++$i;<br>        }<br>    }<br>    return $key;<br>}<br>################################################################################<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">ср, 2 окт. 2024 г. в 14:17, Denis Evdokimov <<a href="mailto:evdokimov.denis@gmail.com" target="_blank">evdokimov.denis@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Это?<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">ср, 2 окт. 2024 г. в 09:22, Alessandro Gorohovski via Moscow-pm <<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div style="font-size:large">Жаль, что не совсем по subject,<br>но спасибо за "пищу для размышлений".</div><div style="font-size:large"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">вт, 1 окт. 2024 г. в 23:15, Alexander Batyrshin <<a href="mailto:0x62ash@gmail.com" target="_blank">0x62ash@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Когда-то давно я юзала <a href="https://metacpan.org/pod/Data%3A%3AFind" target="_blank">https://metacpan.org/pod/Data%3A%3AFind</a> для поиска в сложных вложенных структурах.<div><br></div><div><br></div><div><div><br><blockquote type="cite"><div>On 1 Oct 2024, at 12:34, Alessandro Gorohovski via Moscow-pm <<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>> wrote:</div><br><div><div dir="ltr"><div style="font-size:large">Уважаемое сообщество, приветствую!</div><div style="font-size:large"><br></div><div style="font-size:large">Подскажите, может кто-нибудб знает/сталкивался:</div><div style="font-size:large">существует ли способ узнать родительский ключ хеша по ссылке?<br></div><div style="font-size:large"><br></div><div style="font-size:large"># Например, есть хеш</div><div style="font-size:large">my %h = ( a => { b=> 1}, aa=> {bb=>2, }, );</div><div style="font-size:large"><br></div><div style="font-size:large"><div># вызов функции, где необходимо узнать родительский ключ</div><div># например, 'aa'</div></div><div style="font-size:large">my $k = &where_key( \%{ $h{aa} } );</div><div style="font-size:large"><br></div><div style="font-size:large">exit;</div><div style="font-size:large"><br></div><div style="font-size:large">sub where_key {<br></div><div style="font-size:large">  my $sh = shift;</div><div style="font-size:large"><br></div><div style="font-size:large"><span style="background-color:rgb(255,217,102)">  my $k =  ??? if ref( $sh ) eq 'HASH';</span></div><div style="font-size:large"><br></div><div style="font-size:large">  return $k;<br></div><div style="font-size:large">}</div></div>
-- <br>Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br></div></blockquote></div><br></div></div></blockquote></div>
-- <br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div></div>