Matti Maekitalo: Array Referenz in Perl

Beitrag lesen

use Mosche;

Mein Problem ist jetzt, daß ich nicht weiß, ob nach dem "my"
trotzdem noch die alte Referenz gilt oder dort ein neuer
Speicherbereich reserviert wird. Wie kann ich das sonst machen,
daß garantiert immer ein neuer Speicherbereich reserviert ?

Wenn du eine Variable mit 'my' lexikalisierst, dann wird bei jedem
Schleifendurchlauf natuerlich eine neue Instanz angelegt. Der
Gueltigkeitsbereich liegt nur innerhalb der beiden {}.

Nichts für ungut Christian, aber diese Aussage hättest du mal besser qualifizieren sollen, denn sie stimmt zwar (die Aussage über den Gültigkeitsbereich), hat aber IMHO wenig mit der Fragestellung zu tun.

use Data::Dumper;
use strict;
my %myHash;
foreach (1 .. 3) {
 my $key = 'blah'.$_;
 my @array = ($_++, $_++, $_);
 $myHash{$key} = @array;  # oder (unperformanter ?): [@array]
}
print Dumper(%myHash);

Die Garbage Collection (oder so ähnlich) löscht die Variable nicht, wenn noch Referenzen darauf zeigen, was in diesem Fall zutrifft. So wird zwar jedes Mal eine neue Instanz angelegt, allerdings wird die alte nicht gelöscht, solange deren Referenzzähler nicht gleich 0 ist.

(Ich freu mich schon darauf, was du jetzt korrigieren wirst :-))

use Tschoe qw(Matti);