2013-07-13 3 views
0

Я использую TMDB модуль PerlPerl обращающихся многомерных массивов

Как бы я получить элементы в примере из кода ниже, так

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

Thats what I люблю про perl каждый раз, когда я завязываю что-то новое! Thanx @Dave Cross – Holly

Смежные вопросы