Wie funktioniert open (STDOUT, ': skalar', \ $ stdout) in Perl?

8

Was bedeutet >:scalar ?

Sehen Sie diese Art von Code nie zuvor ..

    
asker 21.09.2011, 07:51
quelle

2 Antworten

9

Die spezielle "& gt;: THING" -Syntax weist das Perl-IO-System an, den von THING angegebenen Layer zu verwenden. Sehen Sie sich die PerlIO-Dokumentation für "layer" an. Gemeinsame Layer sind 'roh' und 'utf8'.

In diesem Fall können Sie $ stdout als speicherinterne Datei verwenden, die am Ende alles enthält, was an STDOUT gesendet wird. Im Allgemeinen können Sie mit der Syntax eine speicherinterne Datei öffnen und dann das Dateihandle an andere Funktionen senden, die normalerweise in Dateien schreiben, so dass Sie ihre Ausgabe erfassen (oder ihre Eingabe bereitstellen können).

Sie können dasselbe Ergebnis auch erreichen, indem Sie eine "Datei" öffnen, die eine Referenz auf einen Skalar ist:

%Vor%

Es wird von PerlIO bereitgestellt und von PerlIO :: scalar implementiert, obwohl Sie dies nicht tun müssen "Verwenden" Sie das Modul, um auf die Funktionalität zuzugreifen.

    
Alex 21.09.2011 08:01
quelle
3

Perl verwendet ein mehrschichtiges IO-System . Am Ende der Kette befindet sich eine Ebene, die sich mit dem Zugriff auf die Medien befasst. scalar ist die IO-Systemschicht, die das Lesen von und Schreiben in einen Skalar statt in eine Datei behandelt. Sagen

%Vor%

für skalare Handles entspricht dem Ausdruck

%Vor%

für OS-Handles. Es ist völlig redundant, da Perl bereits weiß, dass es sich um ein Skalarhandle und nicht um ein Betriebssystemhandle handelt.

    
ikegami 21.09.2011 16:04
quelle

Tags und Links