< >
имеет приоритет термина. Вот пример из документации:
say <a b c>[1];
Я полагал, что один и тот же приоритет будет применяться ко всем операторам цитирования. Это работает:
my $string = '5+8i';
my $number = <<$string>>;
say $number;
Это интерполирует $string
и создает алломорфы (в данном случае ComplexStr):
(5+8i)
Но если я попытаюсь проиндексировать его, как пример из документации, он не скомпилируется:
my $string = '5+8i';
my $number = <<$string>>[0];
say $number;
Я не совсем уверен, что Perl 6 думает, что здесь происходит. Возможно, он думает, что это гипероператор:
===SORRY!=== Error while compiling ...
Cannot use variable $number in declaration to initialize itself
at /Users/brian/Desktop/scratch.pl:6
------> say $⏏number;
expecting any of:
statement end
statement modifier
statement modifier loop
term
Я могу пропустить переменную:
my $string = '5+8i';
say <<$string>>[0];
Но это другая ошибка, которая не может найти закрывающие кавычки:
===SORRY!=== Error while compiling ...
Unable to parse expression in shell-quote words; couldn't find final '>>'
at /Users/brian/Desktop/scratch.pl:8
------> <BOL>⏏<EOL>
expecting any of:
statement end
statement modifier
statement modifier loop
<<"$string">>[0]
работает как положено - person Christoph   schedule 02.07.2017"
— это еще один способ предотвратить попадание парсера в тупик>>.
. - person Elizabeth Mattijsen   schedule 03.07.2017