Мне это кажется ошибкой.
Это выглядит очень тесно связанным с Какой контекст смущает этот zip-оператор Perl 6? , ставший проблемой репо Rakudo Невозможность утонутьfor
когда Z+=
используется в качестве последнего оператора , который был закрыт с помощью жареных тестов Проверка потопления для приемников в последнем вызове дополнительных операторов .
Загадка в том, почему существует новая ошибка.Я подозреваю, что кому-то нужно почистить кухонную раковину, то есть взять там, где остановился Зоффикс, с его Недостатками в предполагаемой утечке / &unwanted
помощник .
Вот мой лучший выстрел в гольф, так чтодалеко для сужения новой проблемы или регрессии:
my $foo = 'a';
ok: for 1 { $foo X= 'b' }
notok: for 1 -> $_ { $foo X= 'c' }
say $foo; # b
halfok: 'd' ~ do for 1 -> $_ { $foo X= 'e' } # Useless use of "~"
say $foo; # e
Линия ok:
работает, потому что она пропускает аргумент ->
.
Линия notok:
- это мой гольф вашегопроблема.
Сообщение об ошибке для строки halfok:
вызвано тем, что ее результат отбрасывается.Но do
вынудил компилятор вычислить выражение $foo X= 'e'
в блоке, как и должно быть, и как это не удалось в строке notok:
.
{@total Z+= @^þ} for @bitfields;
Возможно, это потому, что это немодификатор версии.И / или потому что он не использует синтаксис ->
(который является частью регрессии или новой ошибки в моем гольфе выше).
Или, возможно, просто удача.Я думаю, что большая часть кода обработки раковин в Rakudo - это работа Ларри с давних времен, когда он пытался заставить вещи работать в основном правильно.