Referenzen
Moldawian
- perl
Hi,
ich dachte immer ich könnte mit einer Referenz auf eine Variable verweisen, so dass, auch wenn sich der Wert dieser Variable ändert, immer der aktuelle Wert der Variable angezeigt wird. Irgendwie klappt das aber nicht. Geht das etwa gar nicht mit Referenzen? Wenn nein, wie dann?
MfG
Moldawian
hi!
ich dachte immer ich könnte mit einer Referenz auf eine Variable
verweisen, so dass, auch wenn sich der Wert dieser Variable
ändert, immer der aktuelle Wert der Variable angezeigt wird.
Irgendwie klappt das aber nicht. Geht das etwa gar nicht mit
Referenzen? Wenn nein, wie dann?
Keine Ahnung, was du jetzt genau vorhast. Wo willst du immer den
aktuellen Wert welcher Variable anzeigen?
Eine Referenz ist eine Art Pointer, den man nicht verschieben kann
($ref++ zb. ist da nicht erlaubt). Damit kannst du also auf irgend
welche anderen Variablen (Skalare oder komplexere Datenstrukturen)
verweisen. Zum Beispiel:
my $var = 15;
my $ref = $var; # $ref ist jetzt eine Referenz auf $var
print $var, " == ", $$ref;
$$ref ist dann in dem Fall eine Dereferenzierung der Referenz, daher
müsste diese print-Anweisung zweimal den gleichen Wert ausgeben.
Sinnvoll werden Referenzen aber wohl erst bei komplexen Daten, zb.:
my %hash = ('hallo' => 'welt', 'hello' => 'world');
my $hashref = %hash;
print $hashref->{'hallo'}'; # gibt 'welt' aus
print ${$hashref}{'hallo'}; # sollte auch 'welt' ausgeben, aber
# unübersichtlich
Damit kannst du beispielsweise eine komplexe Datenstruktur an eine
Funktion übergeben, ohne dass eine Kopie davon angelegt werden muss
(kostet Zeit) oder um Werte darin zu verändern:
my %hash = ('hallo' => 'welt', 'hello' => 'world');
&func(%hash); # ruft func() mit einer Referenz auf %hash auf
sub func() {
my $hashref = shift;
print $hashref->{'hallo'}; # Dereferenzierung
}
Das gleiche geht dann auch mit Arrays oder mehrfach verschachtelt.
Anwendungsgebiete erschließen sich, wenn man sich näher damit
beschäftigt. Siehe zu diesen Themen auch perldoc perlref.
Ich hoffe, ich konnte dir damit ein bisschen weiterhelfen... :)
bye, Frank!
Hi Frank,
erstmal danke für deine Antwort. Leider konntest auch du (noch) nicht viel zu meiner Erleuchtung beitragen.
ich dachte immer ich könnte mit einer Referenz auf eine Variable
verweisen, so dass, auch wenn sich der Wert dieser Variable
ändert, immer der aktuelle Wert der Variable angezeigt wird.
Irgendwie klappt das aber nicht. Geht das etwa gar nicht mit
Referenzen? Wenn nein, wie dann?
Keine Ahnung, was du jetzt genau vorhast. Wo willst du immer den
aktuellen Wert welcher Variable anzeigen?
Also ich wollte etwa folgendes:
$b="bla";
$a="bla $b";
$b="bar";
print "$a";
die Print-Anweisung sollte jetzt "bla bar" ausgeben. Weißt du wie das gehen könnte?
Ich hoffe, ich konnte dir damit ein bisschen weiterhelfen... :)
Leider nur ein wenig, trotzdem danke.
MfG
Moldawian