Steffen: 2 Dimensionales Hash, Fehler mit use strict

Hallo,

ich hab früher immer ohne use strict und  -w gearbeitet... ;)
naja man staunt nicht schlecht was man alles besser machen kann/muss...
Jedoch bekomme ich derzeit die Fehler mit meinem 2 Dimensionalen Hash nicht weg, ich denke das es was ziemlich simples ist, aber anscheind stehe ich auf dem Schlauch...

Also folgendes läuft ab:

1.
  foreach (@list) {
  push(@HASHA, { 'nick' => $_, 'serv' => $serv[0], 'chan' => $chan, });
  }
Anhand einer Liste wo nur Namen drin sind  (beim Test jetzt nur 4) erstelle ich die Zeilen des Hashes und zusätzlich werden noch 2 weiter Variablen als Spalten hinzugefügt. Wenn man sich das 2 Dimensionale Hash mal als Tabelle vorstellt...

2.
    for($i=0;$i<=3;$i++) {
     print "$HASHA[$i]->{'nick'}\n";
     }
in einer 2. SubRoutine sollen die Daten wieder ausgegeben werden.
Testweise hab ich hier jetzt nurmal 3 Nick's ausgeben wollen.

Wie ich schon gesagt habe läuft ohne use strict alles SUPER, jedoch mit dann nicht :( und derzeit weiß ich echt nicht was falsch is.

Bei der Fehlermeldung : "Can't use string ("") as a HASH ref while "strict refs" in use"  -> er verweist dabei auf die Zeile unter Punkt 2. wo er es ausgeben soll...

Kann mir jemand mal bitte helfen?

Danke & Gruß
Steffen

  1. Hi Steffen,

    ich muß ein wenig im Nebel stochern ...

    foreach (@list) {
      push(@HASHA, { 'nick' => $_, 'serv' => $serv[0], 'chan' => $chan, });

    wieviele Elemente hat dieser Array @list?
    (Und was genau beabsichtigst Du mit dem letzten Komma?)

    for($i=0;$i<=3;$i++) {
         print "$HASHA[$i]->{'nick'}\n";

    Hier setzt Du m. E. voraus, daß es mindestens vier Elemente sind.
    (Statt daß Du einfach die Schleife bis "$i<scalar @HASHA" laufen läßt.)

    Bei der Fehlermeldung : "Can't use string ("") as a HASH ref while
    "strict refs" in use"  -> er verweist dabei auf die Zeile unter Punkt 2.

    Könnte es sein, daß @HASHA weniger als vier Elemente enthält?

    Viele Grüße
          Michael

    1. Hi Steffen,

      Hallo Michael

      ich muß ein wenig im Nebel stochern ...

      foreach (@list) {
        push(@HASHA, { 'nick' => $_, 'serv' => $serv[0], 'chan' => $chan, });

      wieviele Elemente hat dieser Array @list?

      ohhh hatte ich das nicht geschrieben ?
      naja eigentlich ca. 15 is unterschiedlich...
      Auf der Suche nach dem Fehler wollt ich möglichst viel ausschließen und hab derzeit nur 5 drinnen

      (Und was genau beabsichtigst Du mit dem letzten Komma?)

      jaa... als ich über einem Jahr mal ein Hash braucht und in der Perldoc nicht so richtig das drin gefunden (eher verstanden ;) )hab hab ich mir diesen Codeschnipsel aus einem anderen Tutorial geschnappt...

      for($i=0;$i<=3;$i++) {
           print "$HASHA[$i]->{'nick'}\n";

      Hier setzt Du m. E. voraus, daß es mindestens vier Elemente sind.
      (Statt daß Du einfach die Schleife bis "$i<scalar @HASHA" laufen läßt.)

      ja stimmt hatte ich eigentlich auch... wollte jetzt aber überall erstemal fehler ausschließen ( da use strict neu für mich is )
      ja sind auch wie gesagt 5 Elemente

      Bei der Fehlermeldung : "Can't use string ("") as a HASH ref while
      "strict refs" in use"  -> er verweist dabei auf die Zeile unter Punkt 2.

      Könnte es sein, daß @HASHA weniger als vier Elemente enthält?

      nein halt nicht... :(

      sehe ich das richtig das du genauso sprachlos bist wie ich ?

      Wenn ich use strict aus dem Script herausnehme läuft es ja auch Fehlerfrei durch...

      Viele Grüße
            Michael

  2. use Mosche;

    Jedoch bekomme ich derzeit die Fehler mit meinem 2 Dimensionalen Hash nicht weg, ich denke das es was ziemlich simples ist, aber anscheind stehe ich auf dem Schlauch...

    Also folgendes läuft ab:

    foreach (@list) {
      push(@HASHA, { 'nick' => $_, 'serv' => $serv[0], 'chan' => $chan, });
      }

    for($i=0;$i<=3;$i++) {
         print "$HASHA[$i]->{'nick'}\n";
         }

    Bei der Fehlermeldung : "Can't use string ("") as a HASH ref while "strict refs" in use"  -> er verweist dabei auf die Zeile unter Punkt 2. wo er es ausgeben soll...

    Hast du den Array @HASHA initialisiert? Vielleicht mit irgendwas wie
    @HASHA = (''); ? Dann hättest du den Fehler gefunden. Aosntsnten könnten dir ein paar Fehlermeldung a la

    use Data::Dumper;

    print Dumper(@list);
    print Dumper(@HASHA);

    helfen. Vielleicht findest du da ein paar Einträge, die da nicht sein sollten. Ansonsten einfach mal ein bißchen mehr Testcode posten.

    use Tschoe qw(Matti);

    1. Hallo,

      Hast du den Array @HASHA initialisiert? Vielleicht mit irgendwas wie
      @HASHA = (''); ? Dann hättest du den Fehler gefunden. Aosntsnten könnten dir ein paar Fehlermeldung a la

      use Data::Dumper;

      print Dumper(@list);
      print Dumper(@HASHA);

      helfen. Vielleicht findest du da ein paar Einträge, die da nicht sein sollten. Ansonsten einfach mal ein bißchen mehr Testcode posten.

      JA DANKE !!! ;)
      denn grad Dumper hat mich drauf gebracht das das initialisieren mit
      my @HASHA = ('');
      FALSCH is !!! NUR my @HASHA;
      und dann funktioniert es...

      DANKE für Eure mühe... ;)