Синтаксис Perl: хэш хэш-ссылок хэш-ссылок - PullRequest
1 голос
/ 29 декабря 2011

Я отказался от идеи использовать это для моей программы, но я заинтригован, потому что я так и не нашел ответа на вопрос, как это сделать.В принципе, если я создаю что-то вроде следующего (пожалуйста, простите мое форматирование, если следующее не выглядит нормально):

  • A = |num_key => hashref_a|,
  • hashref_a - ссылка на хешна a = |string_keys => hashref_b|,
  • hashref_b - это ссылка на хеш-код на b = |num_key, num_value|.

Итак, как вы видите, первый уровень - это хэш, ключами которого являются числа и его значенияявляются ссылками на другой хеш, который, в свою очередь, является хешем, ключи которого являются строками, связанными со значениями, которые снова являются хеш-ссылками (однако, это хеши только ключей и чисел).

Теперь, как мне получить доступ к b (полный список ключей или только значение для соответствующего ключа), получив num_key для первого хеша и определенный string_key для второго хеша.

Я действительно надеюсь, что смог четко изложить вопрос!

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

Если я правильно понял ваш запрос:

my %hash = ( num_key => { string_keys => { num_key => 1.234 } } );

Или:

my %hash_b = ( num_key => 1.234 );
my %hash_a = ( string_keys => \%hash_b );
my %hash_z = ( num_keys => \%hash_a );

Хммм ... после редактирования вопроса, я думаю, вы спрашиваете, как получить доступзначения, а не то, как их построить.Я использовал $num_key, но единственное допустимое значение для этого, учитывая данные, это 'num_key';аналогично с $string_key и 'string_keys'.Однако стрелки являются ключом к обозначению.

2 голосов
/ 29 декабря 2011
my %hash = ( 3 => { "hello" => { 18 => 583 } } );

print $hash{3}->{"hello"}->{18};
# ==> 583

РЕДАКТИРОВАТЬ Я вижу, @JonathanLeffler сделал почти такой же ответ, но я оставлю свой здесь в качестве дополнения к его, как пригодную для демонстрации его объяснения.

0 голосов
/ 29 декабря 2011
%hash = (
   one => { a => 10, b => 20 },
   two => { c => 30, d => 40 }
);

&function(\%hash);

sub function {
   my $hash = shift;

   $hash->{two}->{d} = 50;   # changes 'd'
}

Вы можете зайти так далеко, как хотите, с хешами хешей.Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...