erwendung von Doppelpunkten in Methoden- und Funktionsaufrufen in Perl

Ich frage mich, was Doppelpunkte mit Methoden- und Funktionsaufrufen in Perl 6 zu tun haben. Für den Datensatz verwende ich Perl6, Version 2015.05-55-gd84bbbc, die auf MoarVM, Version 2015.05, basiert.

Ich habe gerade Folgendes in einem @ geseh Perl6-Spezifikationstest (S32-io) (Ich habe den Kommentar hinzugefügt):

$fh.print: "0123456789A";   # prints '0123456789A' to the file

Soweit ich das beurteilen kann, entspricht dies:

$fh.print("0123456789A");   # prints '0123456789A' to the file

Beide von diesen scheinen mehrere Argumente zu haben und die Listen in Ordnung zu bringen:

$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

Es muss einen Grund geben, diese beiden unterschiedlichen Syntaxen zu verwenden. Gibt es einen Grund, die eine oder andere Syntax zu verwenden?

Ich habe auch bemerkt, dass wir entweder @ verwenden müss: oder() mit print, wenn als Methode verwendet:

$fh.print(@a);   # Works
$fh.print: @a;   # Works!
$fh.print @a;    # ERROR!

Es gibt auch ein interessantes Verhalten bei der Verwendung eines Doppelpunkts mit der Funktionprint. In diesem Fall,: und() sind nicht gleichwertig:

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) 

Dann habe ich versucht, print in einer Skriptdatei zu verwenden. Dies funktioniert für Ausdrucke auf Standardausgabe:

print @a;

Dies wird jedoch nicht auf die Standardausgabe gedruckt:

print: @a, @a;

Aber die Methodenversion funktioniert einwandfrei:

$fh.print: @a, @a; # Prints '0123456789A0123456789A' to the file

Ich habe das Gefühl, ich verstehe das fast, aber ich kann es nicht in Worte fassen. Könnte jemand bitte erklären, welche Arten der Verwendung von Druck. Werden sich diese Verhaltensweisen aufgrund des Great List Refactor ändern?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage