Может кто-нибудь объяснить хеши в Perl? - PullRequest
3 голосов
/ 31 мая 2011

Основная функция:

my %hash = {'inner1'=>{'foo'=>5},
            'inner2'=>{'bar'=>6}};
$object->State(0, %AMSValues);

Отправлено:

sub State
{
   my ($self, $state, %values) = @_;
   my $value = \%values;

Из того, что я знаю, один должен быть хешем, а другой - указателем, но ...

Hash Values

Не похоже, что картинка работает так,

$value = $value->{"HASH(0x52e0b6c)"}
%values = $values->{"HASH(0x52e0b6c)"}

1 Ответ

13 голосов
/ 31 мая 2011

use warnings; всегда.

Ваш:

my %hash = {'inner1'=>{'foo'=>5},
            'inner2'=>{'bar'=>6}};

неверен;{} генерирует анонимную ссылку на хеш, а% hash получает один ключ (который содержит строковую ссылку на хэш) и значение undef.

Вы хотели:

my %hash = ('inner1'=>{'foo'=>5},
            'inner2'=>{'bar'=>6});

До передачина подпрограммы идет, вы не можете передавать хэши;код, подобный показанному вами, сглаживает хэш в список, а затем повторно собирает хеш из @_, но это будет отдельная копия.Если вы действительно хотите использовать тот же хеш, вы должны вместо этого передать ссылку на хеш.

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