<p dir="ltr">Это будет работать только на новых версиях.<br>
Если это допустимо, то так, конечно проще и понятнее </p>
<br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">пт, 4 окт. 2024 г., 10:02 Alessandro Gorohovski <<a href="mailto:an.gorohovski@gmail.com">an.gorohovski@gmail.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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" target="_blank" rel="noreferrer">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" rel="noreferrer">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" rel="noreferrer">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" rel="noreferrer">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" rel="noreferrer">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" rel="noreferrer">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" rel="noreferrer">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank" rel="noreferrer">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" rel="noreferrer">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer noreferrer" target="_blank">http://moscow.pm.org</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div></div>
</blockquote></div>