Perl Hash von Arrays von Arrays

Ich habe einige Variablen in meinem Hash von mehrdimensionalen arrays verschwinden, sobald ich eine for-Schleife. Die Variablen werden korrekt gedruckt, einzeln in der Schleife, aber wenn ich drucken Sie ein beliebiges Element außerhalb der Schleife, es ist immer leer, außer für den ersten Punkt.

for my $y (0..$last_row - 2) {
    my $mlid = $Sheet->Cells($y+2, 1)->{'Value'}; 
    my @a = ();
    $a[0] = $Sheet->Cells($y+2, 3)->{'Value'}; 
    $a[1] = $Sheet->Cells($y+2, 4)->{'Value'}; 
    $a[2] = $Sheet->Cells($y+2, 6)->{'Value'}; 
    $a[3] = $Sheet->Cells($y+2, 7)->{'Value'}; 
    $a[4] = $Sheet->Cells($y+2, 8)->{'Value'}; 
    push @{$longHash{$mlid}}, [ @a ];
    print "Item in Array in Hash: $longHash{$mlid}[1][0]\n"; #this prints nothing

    if (exists $numPeople{$mlid}){
        $numPeople{$mlid}++;
    }else{
        $numPeople{$mlid} = 0;
        $numPeople{$mlid}++;
    }
}

print "Item in Array in Hash: $longHash{7202}[0][0]\n"; #this prints properly
print "Item in Array in Hash: $longHash{7202}[1][0]\n"; #this prints nothing

Verhalten SOLLTE:

Habe ich einen hash. Der Schlüssel für eine einzelne mlid gibt ein array (für eine person).
In jedem array sollte es ein weiteres array, in dem die 0-4 Indizes werden aus einer Excel-Datei, die ich bin, zu Lesen.

So, um die Daten aus der mlid 7202, ab der 7. person und die 4. Spalte in Excel, ich sollte $longHash{7202}[7][1] (da erstellte ich mir die 4. Spalte der 1. Wert des Arrays.)

  • Sie wurde nur der code, und jetzt $y ist nicht ein index in der hash. Können Sie bitte Kommentar und sagen, was das Verhalten sollte? Ich denke, alles, was Sie jetzt tun müssen ist, ändern $longHash{7202}[0][0] zu $longHash{7202}[0].
  • Ändern push @{$longHash{$mlid}}, [ @a ]; zu $longHash{$mlid} = [ @a ]; wenn Sie tun $longHash{7202}[0] und nicht $longHash{7202}[0][0].
  • Aber ich brauche die zusätzlichen Informationen in 3 Stufen. MLID -, Person -, Person-Statistiken. Es gibt mehrere jeder und ich kann nicht loswerden, auch einem tier.
  • OK, nur Kontrolle. Ich aktualisiert meine Antwort. Ich denke, dass Ihr code sollte jetzt arbeiten. Wenn nicht, versuchen Sie bitte meinem Beispiel und sehen, ob es funktioniert. Wenn es funktioniert, dann gibt es vielleicht ein anderes problem. Zum Beispiel, vielleicht gibt es nur eine person in $mlid==7202. Versuchen Sie use strict; use warnings;.
InformationsquelleAutor VolatileRig | 2011-02-22
Schreibe einen Kommentar