Thread seltsames um print (10 answers)
Opened by topeg at 2010-02-04 20:27

betterworld
 2010-02-04 21:56
#131824 #131824
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Ja, das mit den Legacy-Filehandles ist halt ne seltsame Sache. Wenn bei normalen Objekten "$obj->meth" dasselbe ist wie "meth $obj" (Stichwort indirect object syntax), wird "F->print" offenbar anders geparst als "print F", wobei das erstere ein gewoehnlicher Methodenaufruf (wie bei $obj) ist, das zweitere der print-Operator. Beides funktioniert nur, wenn es das Dateihandle F gibt, wobei afaik ein bisschen Heuristik benutzt wird.

Um an STDOUT als Objekt heranzukommen, gibt es afaik ansonsten nur die Schreibweise *STDOUT{IO}. Somit sieht man auch, dass es ein IO::Handle-Objekt ist:

Code: (dl )
1
2
3
$ perl -lwe 'open F, "/dev/null" or die; print *F{IO}; print *STDOUT{IO}'
IO::Handle=IO(0x926e508)
IO::Handle=IO(0x9256610)


Als weiteren Trick wollte ich das folgende vorschlagen, aber hier ist es offenbar doch nur wieder der Glob (statt das Objekt):
Code: (dl )
1
2
$ perl -lwe 'sub foo { print @_ } STDOUT->main::foo()'
GLOB(0x905b600)


Wie gesagt, alles etwas seltsam. Das Ergebnis der Bemuehungen, eine moderne Sprache zu schaffen, die abwaertskompatibel zu einer nichtmodernen Sprache ist ;-)

View full thread seltsames um print