2011-01-31 2 views
1

У меня такая переменная perl. Как я могу получить доступ к исходным свойствам (например, «706»)?Как я могу получить доступ к исходным свойствам?

my @config = [ 
     { 
     'x' => [ 565, 706 ], 
     'y' => [ 122 ], 
     'z' => 34, 
     'za' => 59, 
    } 
]; 

EDIT:print Dumper($config[0]); выходы: $VAR1 = undef;

Похоже, я получаю-доступ с помощью $config[0][0]->{x}[1];. Почему я должен использовать [0] [0] (один ясен, но он второй ...)?

EDIT2: Прошу прощения за изменение структуры данных, но определение, которое было дано мне, изменилось.

+0

Не уверен, что запятая после '59' действительно правильно. – Benoit

+0

Нет запятой, кажется, не проблема – Thariama

+2

Одна из приятных вещей в Perl заключается в том, что закрывающая запятая является необязательной. Это означает, что вы можете оставить его там и не беспокоиться о его добавлении, когда вам нужно добавить больше предметов. –

ответ

3

[EDIT:Следуйте определению проблемы переключения.]

Дано:

my @config = ( 
    [ 
    { # NB: insertion order ≠ traversal order 
     "x" => [ 565, 706 ], 
     "y" => [ 122 ], 
     "z" => 34, 
     "za" => 59, 
    }, 
    ], 
); 

Тогда это будет делать:

# choice §1 
print $config[0][0]{"x"}[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

понимание, конечно, что это всего лишь синтаксический сахар для:

# choice §2 
print $config[0]->[0]->{"x"}->[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

и что это просто синтаксический сахар для:

# choice §3 
print ${ $config[0] }[0]->{"x"}->[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

, который в свою очередь, является просто синтаксический сахар для:

# choice §4 
print ${ ${ $config[0] }[0] }{"x"}->[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

который снова синтаксический сахар для:

# choice §5 
print ${ ${ ${ $config[0] }[0] }{"x"}}[-1]; # get 1ˢᵗ row’s xᵗʰ row’s last element 

и что, конечно, эквивалентно:

# choice §6 
print ${ ${ ${ $config[0] }[0] }{"x"} }[ $#{ ${ ${ $config[0] }[0] }{"x"} } ]; # get 1ˢᵗ row’s xᵗʰ row’s last element 
+0

это ничего не выводит :( – Thariama

+0

Вам нужно $ config -> [0] {"x"} [- 1]. Важна разница между $ config [0] и $ config -> [0]. –

+1

@Thariama: Теперь он соответствует вашему текущему (но не предыдущему) определению проблемы. Я включил вашу структуру данных в свой ответ, если вы снова меняете ее. – tchrist

4

Для ответа на этот вопрос (и многое, многое другое) вам понадобится Perl Data Structures Cookbook.

+0

и ответ есть? – Thariama

+0

Вы читали поваренную книгу? –

+0

i красная его часть, +1 для ваших полезных подсказок – Thariama

4

Ваша переменная эквивалентна:

my $config = [ 
    'x', [ 565, 706 ], 
    'y', [ 122 ], 
    'z', 34, 
    'za', 59, 
]; 

Так что, если вы хотите, чтобы получить 706, вы можете сделать:

print $config->[1][1]; 

Обновлено в соответствии с новыми данными в вопросе

С обновленным вопросом вы можете получить доступ сейчас:

say $config->[0]{x}[1]; 

Новое обновление в соответствии с новой структурой данных

Согласно последней обновленной структуре данных вы предоставляете:

my @config = [ 
     { 
     'x' => [ 565, 706 ], 
     'y' => [ 122 ], 
     'z' => 34, 
     'za' => 59, 
    } 
]; 

присвоенным анонимный массив [...], который содержит себя хэш { ...} к @config массива, это будет заполнить первый элемент @config с анонимным массивом

say Dumper \@config; 

$VAR1 = [ 
      [ 
      { 
       'y' => [ 
         122 
        ], 
       'za' => 59, 
       'x' => [ 
         565, 
         706 
        ], 
       'z' => 34 
      } 
      ] 
     ]; 
say $config[0][0]{x}[1]; #prints 706 

Я думаю, что вы хотите сделать что-либо:

my $config = [ 
     { 
     'x' => [ 565, 706 ], 
     'y' => [ 122 ], 
     'z' => 34, 
     'za' => 59, 
    } 
]; 
say $config->[0]{x}[1]; #prints 706 



my @config = (
     { 
     'x' => [ 565, 706 ], 
     'y' => [ 122 ], 
     'z' => 34, 
     'za' => 59, 
    } 
); 
say $config[0]{x}[1]; #prints 706 
+0

+1 спасибо за ваш ответ – Thariama

+0

Я очень предпочитаю вывод 'Dumpvalue' над выводом' Data :: Dumper'. – tchrist

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