Perl: Wie lexikalisches Datei-Handle an eine Subroutine übergeben und als benanntes Argument verwendet werden?

7

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 ?

    
Thomas L Holaday 25.06.2010, 18:26
quelle

2 Antworten

17

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:

%Vor%

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%     
friedo 25.06.2010, 18:32
quelle
4

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%     
Michael Carman 25.06.2010 18:49
quelle

Tags und Links