Ошибка будет другой, если у вас есть этот код в другой области видимости:
{
FOO:
"Hey".say;
for <a b> {
.say;
last FOO
}
}
# Hey
# a
# labeled last without loop construct
, который также является LTA, поскольку в нем не упоминается название метки.
Но вкороткий: Perl 6 в настоящее время не имеет goto
.В настоящее время метки можно использовать только как способ указать, какую конструкцию цикла вы хотите next
, redo
или last
из.Поместив оператор между меткой и конструкцией цикла, вы эффективно используете его в качестве goto
, который все еще не реализован.
Но на самом деле билет о LTAness обеих ошибок, кажется вместо для меня.
Кроме того, использование фазера FIRST
в качестве альтернативы, похоже, имеет ту же проблему:
FOO:
for <a b> {
FIRST "Hey".say;
.say;
last FOO;
}
# Hey
# a
# labeled last without loop construct
Но работает без специальной метки:
FOO:
for <a b> {
FIRST "Hey".say;
.say;
last;
}
# Hey
# a
Последний вопрос, безусловно, стоит вопроса ракуда: добавлено как https://github.com/rakudo/rakudo/issues/2699.