Thread Unverständliche Typenzuweisung: Skriptanalyse (12 answers)
Opened by angelsfall at 2005-07-22 12:52

esskar
 2005-07-22 15:12
#5323 #5323
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
use CGI;
my $q = CGI->new;
my $v;
%$v = %{$q->Vars};


so funzt es.

Versuch der Erklärung:
$q->Vars gibt entweder eine HashReferenz oder einen Hash zurück; je nach Kontext. Eine Referenz kann man (grob) als Zeiger auf ein Stück im Arbeitsspeicher bezeichnen.

Code: (dl )
1
2
3
my $x = $q->Vars;
my $y = $q->Vars;
my $z = $x;


zeigen nun alle auf die selbe Stelle, heißt: änderst du einen Wert z.B.
Code: (dl )
$x->{foo} = 'bar';
, werden $y und $z auch "geändert", da sie in Wirklichkeiten nur die Speicheraddresse enthalten, an denen die Werte gespeichert sind, aber nicht die Werte selber; (die Änderungen von $x->{foo} würde sich z:b. nun auch auf eine neue Zuweisung
Code: (dl )
my $w = $q->Vars
auswirken.)

Code: (dl )
1
2
3
my %x = %{$q->Vars};
my %y = %{$q->Vars};
my %z = %x;


Erstellt nun jeweils eine Kopie des Hashes, wodurch das Ändern von %x keine Auswirkungen mehr auf %y, %z haben kann.

So weit, so gut;
Code: (dl )
1
2
my $v;
%$v = %{$q->Vars};

Was macht nun dieser Code?

Nun, es wird erstmal eine Variable angelegt!
Mit %$v (oder auch %{$v}) wird nun Perl erklärt, dass $v auf ein Stück Arbeitsspeicher zeigen soll, in dem ein Hash gespeichert werden soll; dieser Hash ist zu diesem Zeitpunkt noch leer. Durch die Zuweisung von %{$q->Vars}, wird dieses Stück Arbeitspeicher nun mit Daten gefüllt.
Danach zeigt $v immer noch auf diesen Speicher, der jetzt aber gefüllt und losgelöst von den Daten aus $q->Vars ist.

Verstanden?


PS: Es sei erwähnt, dass das ganze nur so ähnlich abläuft, aber es kommt der Idee doch schon sehr nah!

View full thread Unverständliche Typenzuweisung: Skriptanalyse