Ich möchte ein lexikalisches Datei-Handle an eine Subroutine unter Verwendung eines benannten Arguments übergeben, aber Folgendes kompiliert nicht:
%Vor%Die Beschwerde lautet:
%Vor%Es funktioniert O.K. Wenn ich die primitive Technik der Übergabe von Argumenten benutze und die Named-Argument-Hash-Technik für den message -Teil funktioniert, nur nicht für den -Datei-Handle -Teil. Benötige ich eine neue Version von print ?
Wenn Sie einen komplexen Ausdruck haben, der ein Dateihandle zurückgibt (wie $args->{fh}
), müssen Sie die Syntax ein wenig entschlüsseln, indem Sie zusätzliche Curlies hinzufügen:
Dies liegt an der seltsamen Art, wie der Operator print
entworfen wurde, ohne Komma zwischen dem Dateihandle und der Liste der zu druckenden Objekte.
Alternativ können Sie das Dateihandle zuerst aus Ihrer arguments -Hashref holen, z. B.
%Vor%froidos Antwort deckt dein Problem ab, aber es gibt ein stilistisches Problem, auf das ich hinweisen möchte. Sie müssen nicht alles in einen anonymen Hash einbinden, um benannte Argumente zu emulieren. Ein Hash-Initialisierer ist nur eine Liste, die als Schlüssel / Wert-Paare interpretiert wird. Das Übergeben einer solchen Liste an eine Untereinheit bietet eine sauberere Syntax für den Aufrufer:
%Vor%Tags und Links perl subroutine