Uso de dos puntos en llamadas a métodos y funciones en Perl 6
Me pregunto qué tienen que ver los dos puntos con las llamadas a métodos y funciones en Perl 6. Para el registro, estoy usando la versión 2015.05-55-gd84bbbc de perl6 construida en la versión 2015.05 de MoarVM.
Acabo de ver lo siguiente en unPrueba de especificación Perl6 (S32-io) (Agregué el comentario):
$fh.print: "0123456789A"; # prints '0123456789A' to the file
Por lo que puedo decir, esto es equivalente a:
$fh.print("0123456789A"); # prints '0123456789A' to the file
Ambos parecen tomar múltiples argumentos y aplanar bien las listas:
$fh.print: "012", "345", "6789A"; # prints '0123456789A' to the file
$fh.print("012", "345", "6789A"); # prints '0123456789A' to the file
my @a = <012 345 6789A>;
$fh.print(@a); # prints '0123456789A' to the file
$fh.print: @a; # prints '0123456789A' to the file
Debe haber alguna razón para tener estas dos sintaxis diferentes. ¿Hay alguna razón para usar una u otra sintaxis?
También noté que tenemos que usar:
o()
con impresión, cuando se usa como método:
$fh.print(@a); # Works
$fh.print: @a; # Works!
$fh.print @a; # ERROR!
También hay un comportamiento interesante cuando se usan dos puntos con la funciónprint
. En este caso,:
y()
no son equivalentes:
print @a; # Prints '0123456789A' (no newline, just like Perl 5)
print(@a); # Ditto
print: @a; # Prints '012 345 6789A' followed by a newline (at least in REPL)
print @a, @a; # Error (Two terms in a row)
print: @a, @a; # Prints '012 345 6789A 012 345 6789A' followed by a newline (in REPL)
Luego intenté usar print en un archivo de script. Esto funciona para impresiones a salida estándar:
print @a;
Sin embargo, esto no se imprime en la salida estándar:
print: @a, @a;
Pero la versión del método funciona bien:
$fh.print: @a, @a; # Prints '0123456789A0123456789A' to the file
Siento que casi entiendo esto, pero no puedo expresarlo con palabras. ¿Podría alguien explicarme estas variedades de uso de impresión? Además, ¿cambiarán estos comportamientos debido al Refactor de la Gran Lista?