siehe Ссылка
Beachten Sie, dass wenn Sie speichern FILEHANDLE in einem Array, oder wenn Sie es sind einen anderen Ausdruck mehr verwenden komplex als eine skalare Variable zu rufen Sie es ab , Sie müssen ein verwenden Block, der den Dateihandlewert zurückgibt stattdessen: ...
In Ihrem Fall würden Sie also einen Block wie diesen verwenden:
%Vor%Wenn Sie etwas anderes als einen einfachen Skalar als Dateihandle haben, müssen Sie die Referenz, die das Dateihandle enthält, in geschweifte Klammern schreiben, damit Perl die Anweisung parsen kann:
%Vor%Ein Teil von Best Practices von Perl besagt, dass ich Dateihandles immer nur aus geschweiften Klammern in Klammern umschließe, obwohl ich damit nicht so verrückt bin.
Die Syntax ist ungerade, da print
eine indirekte Methode für ein Dateihandleobjekt ist:
Sie haben das vielleicht in der CGI.pm alten Schule gesehen. Hier sind zwei indirekte Methodenaufrufe:
%Vor% Das funktioniert fast gut (siehe Schwerns Antwort auf die Mehrdeutigkeit ), solange das Objekt in einem einfachen Skalar ist. Wenn ich jedoch das $cgi_object
in einen Hash setze, bekomme ich den gleichen Syntaxfehler, den Sie mit print
bekommen haben. Ich kann die Klammern um den Hash-Zugriff legen, damit es funktioniert. Weiter mit dem vorherigen Code:
Das ist ein bisschen klobig, also benutzt einfach die Pfeilnotation für alles:
%Vor%Sie können das gleiche mit Dateihandles machen, obwohl Sie das IO :: Handle -Modul verwenden müssen alles funktioniert:
%Vor% Die obigen Antworten sind alle korrekt. Der Grund, warum sie dort keinen vollständigen Ausdruck erlauben ist print FH LIST
ist schon eine ziemlich seltsame Syntax. Etwas Komplizierteres darin einzuführen, würde eine Menge mehrdeutiger Syntax einführen. Der Block entfernte diese Mehrdeutigkeit.
Um zu sehen, wohin dieser Wahnsinn führt, betrachte den Horror als indirekte Objekt-Syntax.
%Vor%Tags und Links perl