Philipp Hasenfratz: Was bedeutet das ?

Beitrag lesen

Halihallo Thomas

my $spin  = IO::File->new_tmpfile;
my $spout = IO::File->new_tmpfile;
my $sperr = IO::File->new_tmpfile;

local(*SPIN, *SPOUT, *SPERR)  = ($spin, $spout, $sperr);

In den ersten 3 Zeilen werden wohl Dateihandels auf 3 Temporäre Dateien angelegt ?!

jups. Wobei du nicht den Handle per se, sondern eine Referenz (im Kontext sogar eine
IO::File - Instanz) auf ihn bekommst.

Aber was zum Himmel bedeutet '*SPIN' etc. (besonders das '*')?

$spin ist im Beispiel eine Referenz auf den Dateihandle. Um nun zum "Dateihandle" (das
wohl bekannteste Beispiel ist STDOUT, STDERR) an sich zu kommen, kannst du diesen im
lokalen Scope definieren und mit *SPIN = $spin setzen. Das * bedeutet 'Adresse von', die
physikalische Adresse des Handles SPIN wird also mit der referenzierten Adresse von
$spin gefüllt, somit ist dann SPIN der Handle, den $spin referenziert. Hulla, jetz hab
ich selbst mich verwirrt ;-)

Klar? - Wenn nicht, kann ich's ja von einer anderen Seite aus zu erklären versuchen.

Viele Grüsse

Philipp