2013-07-13 132 views
0

我使用Perl的TMDB模塊perl的訪問多維數組

我將如何得到本例中的元素從下面的代碼,所以

my $width = '1000'my $file_path = "/yDIVWFJqFLIeS8E1R6GG9uwPMS3.jpg"

my @images = $movie->images; 

# print " <p>backdrops </p>"; 
print OUT JSON::to_json(\@images) ; ## Dump.txt below 

foreach my $image (@images) { 
    #print $movie->cast; 
    my $backdrops = $image->{backdrops}; 
    my $posters = $image->{posters};  
    #print " <p>backdrops" . JSON::to_json(\@backdrops) . "</p>"; 

    foreach my $backdrop ($image{backdrops}) { 
     my $width = $backdrop->{width}; 
     my $file_path= $backdrop->{file_path}; 
     print " <p>backdrops </p>"; 
     print "<div>width : $width <br />$file_path : $file_path </div>"; 
    } 
} 

轉儲樣本.txt

[{ 
    "posters": 
    [{"vote_average":5.89446589446589,"aspect_ratio":0.67,"width":1000,"file_path":"/yDIVWFJqFLIeS8E1R6GG9uwPMS3.jpg","vote_count":11,.....}], 
    "id":60304, 
    "backdrops": 
    [{"vote_average":5.49206349206349,"aspect_ratio":1.78,"width":1920,"file_path":"/4wieJ74tXkZDMiiwJ6yMr7LgSpR.jpg","vote_count":11,.....}] 
}] 
+0

背景圖循環應該是'$ image - > {backdrops}'不是'$ image {backdrops}' – user1937198

+3

請看本教程:http://perldoc.perl.org/perlreftut.html – mzedeler

回答

5
foreach my $backdrop ($image{backdrops}) { 
    ... 
} 

這個代碼有兩個問題。你會發現第一個在你的代碼中包含use strict。這會指出你正試圖訪問一個名爲%image的散列,其中不存在這樣的散列。實際上,您有一個存儲在名爲$image的標量變量中的散列引用。因此,您需要使用->語法訪問這些值,而不是直接查找哈希值。

foreach my $backdrop ($image->{backdrops}) { 
    ... 
} 

現在我們來到$image->{backdrops},但是那個值是什麼?你把它當作一個列表或一個數組來對待。但它實際上是一個數組參考。所以你需要去引用這個引用才能返回數組。你使用@{ ...}來做到這一點。

foreach my $backdrop (@{ $image->{backdrops} }) { 
    ... 
} 

這應該工作。

+0

那就是我每當我想要一些新的東西時,都會喜歡perl! Thanx @Dave Cross – Holly