Hash in einem Array.

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Phill, 06.04.2008.

  1. Phill

    Phill Jungspund

    Dabei seit:
    17.01.2008
    Beiträge:
    16
    Zustimmungen:
    0
    Hallo Leute,

    ich bin mir sicher das Thema ist schon einige mal diskutiert worden, hab mir auch schon einiges durchgelesen aber ich bin kurz vorm verzweifeln!?!?!

    Also ganz einfach: :)

    Ich füttere in einer function einen Array (@t) mit einem hash (%tinfo) ...

    Code:
    foreach (@elements) {
    %tinfo = tSplit($_); # die funktion gibt einen Hash zurück
    if (%tinfo) { push(@t, \%tinfo) } #wenn vorhanden dann pushen
    
    if (%tinfo) { print $tinfo{no}." " } # nur test ob der hash auch funktioniert... (tut er auch)
    
    }
    return(@t);
    }
    so und nun in der anderen function die den return wert bekommt.

    Code:
    foreach (@t) {
    print $_{no}."\n";
    }
    so das gibt folgendes
    wenn ich in der letzten schleife direkt print $_ eingebe gibt er mir HASH(0x82cc240) aus. Also muss er doch den Hash enthalten..

    kann mir einer sagen was ich falsch mache?? Wäre sehr dankbar.
    Gruß
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Gott_in_schwarz, 06.04.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Ich geh jetzt mal nicht auf deinen Code ein, sondern erkläre das, was du imho nicht verstanden hast:
    Arrays können nur Skalare "enthalten", du kannst also nur hash-Referenzen und keinen hashes in arrays packen. (Was du ja auch machst.)
    Die musst du dann natürlich auch wieder dereferenzieren:
    Code:
    my @bla = ({foo => 'bar', omg => 'lol'}, "arrayElement", 3.14);
    print "$bla[0]{foo}\n" # gibt "bar" aus
    $bla[0]{foo} ist dasselbe wie $bla[0]->{foo}.
    {foo => 'bar'} ist eine anonyme Referenz auf das hash (foo => 'bar').
    Siehe auch hier und hier.
    Wenn ich was verpennt haben sollte und das Problem ganz wo anders liegt: man mache mich bitte drauf aufmerksam.
     
  4. #3 Phill, 06.04.2008
    Zuletzt bearbeitet: 06.04.2008
    Phill

    Phill Jungspund

    Dabei seit:
    17.01.2008
    Beiträge:
    16
    Zustimmungen:
    0
    also ich glaube das dereferenzieren ist gar nicht mein problem.
    Mein Problem scheint an folgenden zeilen zu hängen:

    Code:
    	foreach (@timers) {
    		%tinfo = timerSplit($_);
    		if (%tinfo) {
    		push(@t, \%tinfo);
    		print $t[0]{no}."\n";
    		}
    	}
    
    kann mir einer erklären wie es sein kann das der print mir bei jedem durchlauf der schleife einen anderen wert anzeigt???
    Der müsste doch jedes mal den 0ten Array anzeigen und der sollte sich doch durch einen push nicht verändern? macht er aber, es wird jedesmal das selbe wie $tinfo{no} ausgegeben?!?!
     
  5. #4 Gott_in_schwarz, 11.04.2008
    Zuletzt bearbeitet: 11.04.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Hättest du use strict benutzt, wäre dir das nicht passiert...
    use warnings ist auch zu empfehlen...
    Einfach das hash in dem inneren Block mit my deklarieren und die Probleme sollten sich in Luft auflösen.

    Warum das jetzt genau passiert ist, weiß ich auch nicht 100%tig. Also erstmal enthält dein Array dann nur Referenzen auf ein einziges Hash. Und dieses Hash, welches im Array referenziert wird, wird scheinbar mit dem Aufruf "%tinfo = timerSplit($_)" in place verändert; also es wird kein neues Hash erzeugt, sondern immer dasselbe verändert. Also einfach immer my verwenden, wenn du nicht ganz genau weißt, was du tust...
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Hash in einem Array.

Die Seite wird geladen...

Hash in einem Array. - Ähnliche Themen

  1. Ungewollte Ueberspeicherung von Werten eines struct in einem hash

    Ungewollte Ueberspeicherung von Werten eines struct in einem hash: [Perl]Ungewollte Ueberspeicherung von Werten eines struct in einem hash Hallo, mein Problem ist, dass die "score"-Werte des globalen hash...
  2. Shashlik: Android-Anwendungen auf Linux-Desktops

    Shashlik: Android-Anwendungen auf Linux-Desktops: Das neue Projekt Shashlik will eine Emulationsschicht schaffen, mit der Android-Apps auf Linux-Desktops laufen. Anders als bereits vorhandene...
  3. Hashkill 0.3.1

    Hashkill 0.3.1: Hashkill is an opensource hash cracker for Linux that uses OpenSSL. Currently it supports 4 attack methods (dictionary, bruteforce, hybrid) and...
  4. Hashkill 0.3.0

    Hashkill 0.3.0: Hashkill is an opensource hash cracker for Linux that uses OpenSSL. Currently it supports 4 attack methods (dictionary, bruteforce, hybrid) and...
  5. Hashes Generation And Injection Tool

    Hashes Generation And Injection Tool: Hashes is a cross-platform tool that generates and injects different keys with the same hash code in order to test web applications against hash...