0

我正在使用 PerlTMDB模块

我如何从下面的代码中获取示例中的元素

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>";  
     }
}

Dump.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,.....}]
}]
4

1 回答 1

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

这段代码有两个问题。use strict通过包含在您的代码中,您会找到第一个。那会指出您正在尝试访问一个名为的散列%image,其中不存在此类散列。您实际上有一个哈希引用,它存储在一个名为 的标量变量中$image。因此,您需要使用->语法而不是直接的哈希查找来访问这些值。

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

现在我们开始了$image->{backdrops},但是那个值是什么?您将其视为列表或数组。但它实际上是一个数组引用。因此,您需要取消引用此引用才能返回数组。您使用@{ ...}.

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

那应该行得通。

于 2013-07-13T15:17:14.133 回答