my $label = eval { $func->() };
in_our_scope($label) && goto $label || die $label;
 
 
НО ЗАЧЕМ !!!?
Общественность просит кейс в студию.
----------------
Кому: Moscow.pm group ([email protected]);
Копия: Alessandro Gorohovski ([email protected]);
Тема: [Moscow.pm] return по метке;
18.12.2024, 15:24, "Alessandro Gorohovski via Moscow-pm" <[email protected]>:
Всем кто откликнулся, премного благодарен!
 
Согласен, что основная проблема здесь -- правильно выровнять (почистить) стек,
а с этим лучше всего справится evel
 
 
ср, 18 дек. 2024 г. в 12:34, Denis Evdokimov via Moscow-pm <[email protected]>:

На самом деле у тебя 2 задачи:
1) вернуться в определенное место кода и почистит стек
2) передать данные

Для 1) подойдёт:
last МЕТКА
eval+die
goto МЕТКА
 
Для 2) подойдёт:
eval+die
Передавать какую-то ссылку через все функции, чтобы положить туда результат, к примеру $self.
Положить в какую-то глобальную переменную
 
 
ср, 18 дек. 2024 г., 12:18 Иван Бессарабов via Moscow-pm <[email protected]>:
goto — сделает ровно то что хочется.

Все зависит от задачи, но вообще, обычно, считается что goto — это плохо. Так что может быть, нужно как-то пересмотреть условие задачи и переделать код так чтобы не было необходимости в использовании goto.

Пример с goto: https://PerlBanjo.com/95d448df64
 
 
On Wed, Dec 18, 2024 at 8:03 AM Alessandro Gorohovski via Moscow-pm <[email protected]> wrote:
Уважаемое сообщество, приветствую!

Подскажите, может кто-нибудь знает, 
способ глобально выйти (сделать return) из вложенных подпрограмм (функций) по метке, 
т.е. аналогично last для управления циклом
?
 
Например:
 
_Metka:
 
&aaa( @args );
 
$@ && say $@;
exit;
#--------------------
sub aaa {
# ...
   &bbb;
# ...
}
#--------------------
sub bbb {
# ...
   &ccc;
# ...
 
}
 
#--------------------
sub ccc {
# ...
   &ccc;
# ...
   $@ = $results;
   return _Metka;
 
}
 
 
 
--
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
,--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить