<div> </div><div> </div><div>my $label = eval { $func->() };</div><div>in_our_scope($label) && goto $label || die $label;</div><div> </div><div> </div><div>НО ЗАЧЕМ !!!?<br />Общественность просит кейс в студию.</div><div>----------------</div><div>Кому: Moscow.pm group (moscow-pm@pm.org);</div><div>Копия: Alessandro Gorohovski (an.gorohovski@gmail.com);</div><div>Тема: [Moscow.pm] return по метке;</div><div>18.12.2024, 15:24, "Alessandro Gorohovski via Moscow-pm" <moscow-pm@pm.org>:</div><blockquote><div><div style="font-size:large">Всем кто откликнулся, премного благодарен!</div><div style="font-size:large"> </div><div style="font-size:large">Согласен, что основная проблема здесь -- правильно выровнять (почистить) стек,</div><div style="font-size:large">а с этим лучше всего справится <strong>evel</strong></div><div style="font-size:large"> </div></div> <div><div>ср, 18 дек. 2024 г. в 12:34, Denis Evdokimov via Moscow-pm <<a href="mailto:moscow-pm@pm.org" rel="noopener noreferrer">moscow-pm@pm.org</a>>:</div><blockquote style="border-left-color:rgb( 204 , 204 , 204 );border-left-style:solid;border-left-width:1px;margin:0px 0px 0px 0.8ex;padding-left:1ex"><div><p>На самом деле у тебя 2 задачи:<br />1) вернуться в определенное место кода и почистит стек<br />2) передать данные</p>Для 1) подойдёт:<div>last МЕТКА<div>eval+die</div><div>goto МЕТКА</div><div> </div><div>Для 2) подойдёт:</div><div>eval+die</div><div>Передавать какую-то ссылку через все функции, чтобы положить туда результат, к примеру $self.</div><div>Положить в какую-то глобальную переменную</div><div> </div><div> </div><div><div><div>ср, 18 дек. 2024 г., 12:18 Иван Бессарабов via Moscow-pm <<a href="mailto:moscow-pm@pm.org" rel="noopener noreferrer" target="_blank">moscow-pm@pm.org</a>>:</div><blockquote style="border-left-color:rgb( 204 , 204 , 204 );border-left-style:solid;border-left-width:1px;margin:0px 0px 0px 0.8ex;padding-left:1ex"><div>goto — сделает ровно то что хочется.<br /><br />Все зависит от задачи, но вообще, обычно, считается что goto — это плохо. Так что может быть, нужно как-то пересмотреть условие задачи и переделать код так чтобы не было необходимости в использовании goto.<br /><br />Пример с goto: <a href="https://perlbanjo.com/95d448df64" rel="noopener noreferrer" target="_blank">https://PerlBanjo.com/95d448df64</a><br /> </div> <div><div>On Wed, Dec 18, 2024 at 8:03 AM Alessandro Gorohovski via Moscow-pm <<a href="mailto:moscow-pm@pm.org" rel="noopener noreferrer" target="_blank">moscow-pm@pm.org</a>> wrote:</div><blockquote style="border-left-color:rgb( 204 , 204 , 204 );border-left-style:solid;border-left-width:1px;margin:0px 0px 0px 0.8ex;padding-left:1ex"><div><div style="font-size:large">Уважаемое сообщество, приветствую!<br /><br />Подскажите, может кто-нибудь знает, </div><div style="font-size:large">способ глобально выйти (сделать return) из вложенных подпрограмм (функций) по метке, </div><div style="font-size:large">т.е. аналогично <strong>last</strong> для управления циклом</div><div style="font-size:large">?</div><div style="font-size:large"> </div><div style="font-size:large">Например:</div><div style="font-size:large"> </div><div style="font-size:large">_Metka:</div><div style="font-size:large"> </div><div style="font-size:large">&aaa( @args );</div><div style="font-size:large"> </div><div style="font-size:large">$@ && say $@;</div><div style="font-size:large">exit;</div><div style="font-size:large">#--------------------</div><div style="font-size:large">sub aaa {<!-- --></div><div style="font-size:large"># ...</div><div style="font-size:large">   &bbb;</div><div style="font-size:large"># ...</div><div style="font-size:large">}</div><div style="font-size:large"><div>#--------------------</div></div><div style="font-size:large"><div>sub bbb {<!-- --></div><div># ...</div><div>   &ccc;</div><div># ...</div><div> </div><div>}</div><div> </div></div><div style="font-size:large"><div>#--------------------</div></div><div style="font-size:large"><div><div>sub ccc {<!-- --></div><div># ...</div><div>   &ccc;</div><div># ...</div><div>   $@ = $results;</div><div>   return _Metka;</div><div> </div><div>}<br /> </div><div> </div></div><div> </div></div></div>--<br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org" rel="noopener noreferrer" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" rel="noopener noreferrer" target="_blank">http://moscow.pm.org</a></blockquote></div>--<br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org" rel="noopener noreferrer" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" rel="noopener noreferrer" target="_blank">http://moscow.pm.org</a></blockquote></div></div></div></div>--<br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org" rel="noopener noreferrer" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" rel="noopener noreferrer" target="_blank">http://moscow.pm.org</a></blockquote></div>,--<br />Moscow.pm mailing list<br /><a href="mailto:moscow-pm@pm.org" rel="noopener noreferrer">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org/" rel="noopener noreferrer">http://moscow.pm.org</a></blockquote>