2016-08-01 10 views
1

Ich habe ein Array von Hash, dass der Wert von Hash ein Array ist. -> Ich drücke "@title" auf "part" und für den Druck, -> Ich lege jedes Buch {part} in einem temporären Array auf jedes Element des Titels zugreifen, aber es nur das erste Element drucken kann ich ' t Zugang zu allen Elementen „Titel“ in der Reihe „Büchern“Wie greife ich auf ein Array in einem Hash-Array in Perl zu?

@books =(); 
@title = (1,2,3,4,5); 
push @books,{subject=>"hello" , part =>@title }; 
for($i=0;$i<scalar(@books);++$i) 
{ 
    print $books[$i]{subject}; 

    @temp = $books[$i]{part}; 
    for($j=0;$j<scalar(@temp);++$j) 
    { 
     print $temp[$j]; #this print just first element "1" 
    } 
} 
+0

Siehe auch: [? wie speichere ich ein Array als Wert in einem Perl-Hash] (http: //stackoverflow.com/questions/28480241/how-do-i-store-an-array-as-a-value-in-a- -perl-Hash). –

+0

gibt es ein anderes Problem: für jedes Buch drucken sie die Informationen des letzten Buches –

Antwort

4

das Problem hierbei ist, dass die Hash-Referenz, die Sie auf dem @books Array drängen nicht korrekt erstellt werden.

Die Hashreferenz Sie sieht wie folgt erstellen:

{ 'subject' => 'hello', 
    'part' => 1, 
    '2'  => 3, 
    '4'  => 5, 
} 

wenn Sie wahrscheinlich zu erwarten, wie folgt aussehen:

{ 'subject' => 'hello', 
    'part' => [ 
     1, 
     2, 
     3, 
     4, 
     5, 
    ], 
} 

Dies geschieht, weil Werte in Hashes und Arrays zu haben sein SCALAR Werte. Um die Hash-Referenz zu erzeugen richtig eine Referenz zum @title Array unter dem Schlüssel part speichern zu müssen, erstellen Sie einen Verweis mit einem \:

push @books, { subject => "hello", part => \@title }; 

Hinweis: Dies bedeutet auch, dass, wenn Sie extrahieren mögen die part Schlüssel in das @temp Array müssen Sie de-reference es (da es sich um ein Array Referenz):

@temp = @{ $books[$i]{part} };