Stefan Welscher: (Hashes) 2 Zweige beinhalten immer den gleichen Wert 0_o

Hallo Selfhtml,
ich bin wirklich am Verzweifeln..
Ich habe in einem Perl Script ein großes Hash über viele Ebenen und Zweige. Daraus machen mir 2 Zweige Probleme:

1. $I{'pe'}{'wan'}{1}{'ifc'}
2. $I{'pe'}{'wan'}{'port'}{1}{'ifc'}

Die erste Verzeigung ist praktisch das übergeordnete Interface zu den darunterliegenden Ports (zweite Verzweigung).

Mein Problem ist nun, dass (egal was ich bisher versucht habe) die beiden immer den selben Wert haben. Weise ich 1 einen Namen zu, trägt diesen auch automatisch 2 und umgekehrt.

Wo liegt das Problem und welchen Workaround kann ich nutzen um nicht 1000de von Codezeilen umschreiben zu müssen?

  1. Hi,

    Mein Problem ist nun, dass (egal was ich bisher versucht habe) die beiden immer den selben Wert haben. Weise ich 1 einen Namen zu, trägt diesen auch automatisch 2 und umgekehrt.

    vermutlich wird ein und derselbe Hash überall als Value verwendet. Zeig mal bitte den Code deiner o.g. Zuweisung und die Abfrage des deiner Meinung nach fehlerhaften Wertes.

    Gruß
    MrWurf

  2. Ich habe in einem Perl Script ein großes Hash über viele Ebenen und Zweige. Daraus machen mir 2 Zweige Probleme:

    1. $I{'pe'}{'wan'}{1}{'ifc'}
    2. $I{'pe'}{'wan'}{'port'}{1}{'ifc'}

    Mir kommt das ein wenig bekannt vor, oder?

    Du hattest im letzten Thread nicht mehr geantwortet, aber eine Frage bzw. Hinwies war, ob du dir die Warnungen ausgeben läßt und ob du use strict verwendest, vorher brauchen wir gar nicht weitereden. Da, falls dies nicht der Fall ist, der Fehler an so vielen Stellen sein kann, dass es unmöglich ist dir eine Antwort zu geben.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
  3. Hallo,

    ich vermute, du versuchst komplexe Datenstrukturen zu kopieren, kopierst aber nur die Referenz auf besagte Datenstruktur.

    Ob deine Beiden Hash-Elemente auf die selben Daten zeigen, kannst du ganz einfach testen, indem du dir die Werte deiner Hashs ausgeben lässt:

      print $I{'pe'}{'wan'}{1}, "\n";  
      print $I{'pe'}{'wan'}{'port'}{1}, "\n";
    

    Dabei dürfte in etwa das Folgende ausgegeben werden:

    HASH(0x1858130)
      HASH(0x1858130)

    Sind die Werte gleich, bedeutet das, dass beide Hash-Elemente auf die selben Daten zeigen.

    Wie du komplexe Datenstrukturen kopieren kannst, ist hier nachzulesen:

    http://www.unix.org.ua/orelly/perl/cookbook/ch11_13.htm

    Schöne Grüße.

  4. Hallo Stefan !

    Du hattest den Lezten Thread nicht fortgefuehrt und der ist im Archiv.
    O.K. kann passieren.

    Aber warum Du dann die gleiche Frage neu ( und weniger praezise ) formulierst ohne meine Rueckfragen ( insert, threading ) zuerst beantwortet zu haben, entzieht sich meinem Verstaendnis.

    Das halte ich mal fuer ein Versehen von Dir...
    War es doch wohl, oder ?

    Lies meine Fragen dazu doch bitte nochmal durch und beantworte sie.

    Gruss

    Holger

    --
    Aus dem Perl Styleguide:
    "Choose mnemonic identifiers. If you can't remember what mnemonic means, you've got a problem."
    1. Du hattest den Lezten Thread nicht fortgefuehrt und der ist im Archiv.
      O.K. kann passieren.

      hatte ich auch schon gesehen, der war heute mittag noch da :-(

      Struppi.

      --
      Javascript ist toll (Perl auch!)