<div dir="ltr"><div class="gmail_default" style="font-size:large">По всей видимости, Denis имел ввиду</div><div class="gmail_default" style="font-size:large">say</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"><br></div><div class="gmail_default" style="font-size:large">Конечно, "положа руку на сердце", предложенная функция -- это вариация через for</div><div class="gmail_default" style="font-size:large">первоначального алгоритма через while, который предложил ув.</div><div class="gmail-gs" style="margin:0px;min-width:0px;padding:0px 0px 20px;width:initial;font-family:"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif;font-size:medium"><div class="gmail-gE gmail-iv gmail-gt" style="font-size:0.875rem;padding:20px 0px 0px"><table cellpadding="0" class="gmail-cf gmail-gJ" style="border-collapse:collapse;margin-top:0px;width:auto;font-size:0.875rem;display:block"><tbody style="display:block"><tr class="gmail-acZ" style="height:auto;display:flex"><td class="gmail-gF gmail-gK" style="padding:0px;vertical-align:top;width:813.688px;line-height:20px;display:block;max-height:20px"><table cellpadding="0" class="gmail-cf gmail-ix" style="border-collapse:collapse;table-layout:fixed;width:813.688px"><tbody><tr><td class="gmail-c2" style="display:flex"><h3 class="gmail-iw gmail-gFxsud" style="overflow:hidden;font-size:0.75rem;font-weight:inherit;margin:inherit;text-overflow:ellipsis;color:rgb(95,99,104);line-height:20px"><span class="gmail-qu" role="gridcell" tabindex="-1"><span name="Steffen Winkler via Moscow-pm" class="gmail-gD" style="color:rgb(31,31,31);font-size:0.875rem;font-weight:bold;display:inline;vertical-align:top;line-height:20px"><span style="vertical-align:top">Steffen Winkler</span></span></span></h3></td></tr></tbody></table></td></tr></tbody></table></div></div><div class="gmail_default" style="font-size:large"><span style="font-size:small">sub where_key {</span><br style="font-size:small"><span style="font-size:small">     my $ref = shift;</span><br style="font-size:small"><span style="font-size:small">     while ( my ($key, $value) = each %h ) {</span><br style="font-size:small"><span style="font-size:small">         $ref eq $value</span><br style="font-size:small"><span style="font-size:small">              and return $key;</span><br style="font-size:small"><span style="font-size:small">     }</span><br style="font-size:small"><span style="font-size:small">     return;</span><br style="font-size:small"><span style="font-size:small">}</span><br></div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Только с неявно заданным для функции хэшем.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">пт, 4 окт. 2024 г. в 13:06, Dmitry L. via Moscow-pm <<a href="mailto:moscow-pm@pm.org">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">Почему только на новых? (и на сколько новых?).<br>
<br>
On Fri, 4 Oct 2024 at 12:23, Denis Evdokimov via Moscow-pm<br>
<<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>> wrote:<br>
><br>
> Это будет работать только на новых версиях.<br>
> Если это допустимо, то так, конечно проще и понятнее<br>
><br>
><br>
> пт, 4 окт. 2024 г., 10:02 Alessandro Gorohovski <<a href="mailto:an.gorohovski@gmail.com" target="_blank">an.gorohovski@gmail.com</a>>:<br>
>><br>
>> Denis, приветствую!<br>
>><br>
>> Извиняюсь за то, что отвечаю с опозданием.<br>
>> Был вовне.<br>
>><br>
>> Действительно Ваш код хорош при определённых условиях,<br>
>> например, если передавать просто ссылку на хеш родителя<br>
>> и использовать это как ядро рекурсии.<br>
>> Премного благодарен.<br>
>><br>
>> Только я ему сделал небольшую оптимизацию: убрал лишний внутренний цикл.<br>
>> Так пожалуй прозрачнее и быстрее будет работать.<br>
>> Вот что получилось:<br>
>><br>
>> my %h = ( a => 1, b => 1, c => 1 );<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>
>> sub findHashKey {<br>
>>  my $hash  = shift;<br>
>><br>
>>  my $v;<br>
>>  for( %$hash ) {<br>
>>     return $v if \$_[ 0 ] eq \$_;<br>
>>     $v = $_;<br>
>>   }<br>
>> }<br>
>><br>
>> OUTPUT:<br>
>> a<br>
>> a<br>
>><br>
>> b<br>
>> b<br>
>><br>
>> c<br>
>> c<br>
>><br>
>><br>
>> ср, 2 окт. 2024 г. в 14:18, Denis Evdokimov <<a href="mailto:evdokimov.denis@gmail.com" target="_blank">evdokimov.denis@gmail.com</a>>:<br>
>>><br>
>>> Это?<br>
>>><br>
>>> #!/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>
>>><br>
>>> ср, 2 окт. 2024 г. в 14:17, Denis Evdokimov <<a href="mailto:evdokimov.denis@gmail.com" target="_blank">evdokimov.denis@gmail.com</a>>:<br>
>>>><br>
>>>> Это?<br>
>>>><br>
>>>> ср, 2 окт. 2024 г. в 09:22, Alessandro Gorohovski via Moscow-pm <<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>>:<br>
>>>>><br>
>>>>> Жаль, что не совсем по subject,<br>
>>>>> но спасибо за "пищу для размышлений".<br>
>>>>><br>
>>>>><br>
>>>>> вт, 1 окт. 2024 г. в 23:15, Alexander Batyrshin <<a href="mailto:0x62ash@gmail.com" target="_blank">0x62ash@gmail.com</a>>:<br>
>>>>>><br>
>>>>>> Когда-то давно я юзала <a href="https://metacpan.org/pod/Data%3A%3AFind" rel="noreferrer" target="_blank">https://metacpan.org/pod/Data%3A%3AFind</a> для поиска в сложных вложенных структурах.<br>
>>>>>><br>
>>>>>><br>
>>>>>><br>
>>>>>> 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:<br>
>>>>>><br>
>>>>>> Уважаемое сообщество, приветствую!<br>
>>>>>><br>
>>>>>> Подскажите, может кто-нибудб знает/сталкивался:<br>
>>>>>> существует ли способ узнать родительский ключ хеша по ссылке?<br>
>>>>>><br>
>>>>>> # Например, есть хеш<br>
>>>>>> my %h = ( a => { b=> 1}, aa=> {bb=>2, }, );<br>
>>>>>><br>
>>>>>> # вызов функции, где необходимо узнать родительский ключ<br>
>>>>>> # например, 'aa'<br>
>>>>>> my $k = &where_key( \%{ $h{aa} } );<br>
>>>>>><br>
>>>>>> exit;<br>
>>>>>><br>
>>>>>> sub where_key {<br>
>>>>>>   my $sh = shift;<br>
>>>>>><br>
>>>>>>   my $k =  ??? if ref( $sh ) eq 'HASH';<br>
>>>>>><br>
>>>>>>   return $k;<br>
>>>>>> }<br>
>>>>>> --<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>
>>>>>><br>
>>>>>><br>
>>>>> --<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>
><br>
> --<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>
<br>
<br>
<br>
-- <br>
//wbr, Dmitry L.<br>
-- <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>