Raphael: Perl-Syntax korrekt ?

Hallo,

kurze Frage :

Ist diese Schreibweise korrekt ?

push @{$hash_history{$alarm}{"DETAILS"}}, $fehler_details;

Wenn ja, kann ich diesen Befehl ausfuehren auch auf einen leeren Hash ausfuehren ?

Und kann ich so die ueber push eingefuegten Elemente so wieder auflisten ?

foreach my $uk (@{$hash_history{$alarm}{"DETAILS"}})
{
}

Vielen Dank im voraus,

Raphael

  1. Ist diese Schreibweise korrekt ?

    kommt drauf an, was für eine Fehlermledung erhälst du?

    push @{$hash_history{$alarm}{"DETAILS"}}, $fehler_details;

    $hash_history => HASH
    $hash_history{$alarm} => HASH
    $hash_history{$alarm}{"DETAILS"} => ARRAY

    Das geht nicht. Ein Hash ist ähnlich aufgebaut wie ein Array wo die key, value Paare hintereinander kommen. D.h. ineinander verschachtelte HASHs oder ARRAYs kann es nicht geben.

    Wie du richtig so komplexe Datenstrukturen aufbauen kannst, steht auch in deiner Perl Dokumentation:

    http://perldoc.com/perl5.8.4/pod/perlreftut.html
    http://perldoc.com/perl5.8.4/pod/perllol.html
    http://perldoc.com/perl5.8.4/pod/perldsc.html

    Struppi.

    1. use Mosche;

      push @{$hash_history{$alarm}{"DETAILS"}}, $fehler_details;

      $hash_history => HASH
      $hash_history{$alarm} => HASH
      $hash_history{$alarm}{"DETAILS"} => ARRAY

      Ich korrigiere das mal:
      $hash_history => HASH
      $hash_history{$alarm} => \HASH
      $hash_history{$alarm}{"DETAILS"} => \ARRAY
      @{$hash_history{$alarm}{"DETAILS"}} => ARRAY # @{} dereferenziert

      Beachte die impliziten De-/Referenzierungen

      Das geht nicht. Ein Hash ist ähnlich aufgebaut wie ein Array wo die key, value Paare hintereinander kommen. D.h. ineinander verschachtelte HASHs oder ARRAYs kann es nicht geben.

      Den Satz verstehe ich nicht. Er arbeitet hier korrekterweise mit Rererenzen. Ich entnehme seinem Code keine Fehler.

      Das push() müsste demnach OK sein. Ich kann den Codeteil ohne Probleme ausführen.

      use Tschoe qw(Matti);

      --
        Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
      1. Ich korrigiere das mal:
        $hash_history => HASH
        $hash_history{$alarm} => \HASH
        $hash_history{$alarm}{"DETAILS"} => \ARRAY
        @{$hash_history{$alarm}{"DETAILS"}} => ARRAY # @{} dereferenziert

        Beachte die impliziten De-/Referenzierungen

        Ich arbeite eigentlich immer mit der Pfeil Notation und hab das noch nie ausprobiert. Du hast natürlich recht.

        Ich würde das Konstrukt (weil ich's übersichtlicher finde) so schreiben:
        @{$hash_history{$alarm}->{"DETAILS"}}

        Das geht nicht. Ein Hash ist ähnlich aufgebaut wie ein Array wo die key, value Paare hintereinander kommen. D.h. ineinander verschachtelte HASHs oder ARRAYs kann es nicht geben.

        Den Satz verstehe ich nicht. Er arbeitet hier korrekterweise mit Rererenzen. Ich entnehme seinem Code keine Fehler.

        auch das ist richtig.
        Ich dachte wegen der schreibweise, er möchte ein HASH in einem HASH deklarieren, natürlich funktionert das mit Referenzen.
        Naja, ich hab ihm ja ein paar Docs mit auf den Weg gegeben.

        Das push() müsste demnach OK sein. Ich kann den Codeteil ohne Probleme ausführen.

        Tja, aber irgendwas scheint ja nicht zu stimmen, vielleicht kriegen wir's noch mitgeteilt ;-)

        Struppi.