Moldawian: Referenzen

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

  1. 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!

    1. 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