Por que esse operador de feed Perl 6 é uma “declaração falsa”?
Eu peguei este exemplo deDia 10 - Operadores de feeds do Calendário do Advento do Perl 6 2010 com a ligeira mudança de.uc
para o.ucfirst
isso não está mais lá:
my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
==> grep { /at/ } ==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;
Escrevo de maneira um pouco diferente com alguns espaços em branco adicionais:
my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
==> grep { /at/ }
==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;
Agora é uma "declaração falsa":
===SORRY!=== Error while compiling ...
Bogus statement
------> ==> grep { /at/ }⏏<EOL>
expecting any of:
postfix
prefix
statement end
term
Este não é um problema apenas com este exemplo. Alguns exemplos nos documentos atuais podem exibir o mesmo comportamento.
Se eu adicionar umpouco espaço até o final da linha incorreta, funciona novamente:
my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
==> grep { /at/ } \
==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;
Curiosamente, um comentário no final dessa linha não funciona. Eu teria pensado que teria comido o espaço em branco ofensivo.
ooperador de alimentação diz:
No caso de rotinas / métodos que usam um único argumento ou onde o primeiro argumento é um bloco, geralmente é necessário que você chame entre parênteses
Isso funciona:
my @rakudo-people = <scott patrick carl moritz jonathan jerry stephen>;
@rakudo-people
==> grep( { /at/ } )
==> map { .uc } ==> my @who-it's-at;
say ~@who-it's-at;
Mas por que isso não foi um problema na primeira forma? O que o espaço em branco está fazendo aqui? E que situações estão incluídas no "frequentemente necessário"?