Как я могу получить доступ к внутренним свойствам? - PullRequest
1 голос
/ 31 января 2011

У меня есть переменная Perl, как это. Как я могу получить доступ к внутренним свойствам (например, '706')?

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

РЕДАКТИРОВАТЬ: print Dumper($config[0]); выход: $VAR1 = undef;

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

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

Ответы [ 2 ]

4 голосов
/ 31 января 2011

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

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
3 голосов
/ 31 января 2011

[ РЕДАКТИРОВАТЬ: Следуйте определению проблемы смещения. ]

Учитывая:

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
...