2016-06-02 2 views
0

Если бы кто-нибудь мог мне помочь, я был бы очень признателен. В настоящее время я работаю на преобразования некоторых старых сценариев Perl на C#, но при этом я постоянно сталкиваясь код в следующий синтаксис:Перл хэш ссылки

$w{$x}->{y} = $z

Я понимаю основы хэш в Perl, но я довольно новыми для Perl вообще, и я не могу найти такой пример.

Это просто сохранение ссылки на значение ключа в хеше?

+0

Следует отметить, что стрелка между '{$ x}' и '{y}' совершенно не нужна. Это ничего не болит, кроме (IMO) читаемости. Если вы оставите это, внезапно выражение будет выглядеть скорее как двумерная структура, с которой вы можете быть более знакомы, и легче видеть, что '% h' - это, по сути, хэш хэшей. '$ w {$ x} {y} = $ z' –

+1

Спасибо за разъяснение Павла, я согласен с вами в отношении удобочитаемости. Это помогло мне некоторое время –

ответ

0

Работа в обратном направлении, то назначая значение $z к ключевым y из хэша-ссылки, где эта ссылка присвоенный ключа $x хеша по имени %w.

perl -wMstrict -MData::Dumper -E 'my %h; my $x=1; $h{$x}->{y}=3; print Dumper \%h;' 

$VAR1 = { 
      '1' => { 
        'y' => 3 
       } 
     }; 

В Perl, значение структуры данных списка типа может быть только скалярные элементы (отдельные объекты), так что все в рамках первого уровня хэша должна быть ссылкой. Ссылка - это просто скалярное значение, которое содержит «указатель» на рассматриваемый предмет.

0

В нем говорится, что у вас есть хэш %w, который содержит ключ $x. Значение за ключом $x является ссылкой на другой хеш. Поэтому вы обращаетесь к нему с -> для доступа к ключу y. Значение ключа y установлено на значение $z.

Так он выглядит:

%w = ($x => {'y' => $z}) 

Примечание: {} указывают на хеш-ссылку. (в основном указатель на хэш).

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