Проблемы с Perl при добавлении новых пар ключ / значение в анонимный хеш - PullRequest
0 голосов
/ 01 мая 2018

Для практики я использую придуманный хэш, который я нашел, и пытаюсь добавить новые пары ключ-значение, но Perl сообщает: «Ошибка компиляции: (F) Вероятно, означает, что у вас есть синтаксическая ошибка» Хеш

 my $selected = 'box';
 my $d = $design->{$selected};

my $design = {
    box => {
       ne => {data => 'north-east'},
       nw => {data => 'north-west'},
       n  => {data => 'north'},
       s  => {data => 'south'},
       e  => {data => 'east'},
       w  => {data => 'west'},
       se => {data => 'south-east'},
       sw => {data => 'south-west'},
    }
 };

и чтобы добавить новую пару ключ / значение, я перепробовал весь синтаксис, который я мог получить:

%{$design} = eastside=>ne;
$design{box}->{eastside}=Data=>ne;
%{$design}{box}={eastside=>Data=>ne};

Ничто из этого не работало (и их варианты). Это из-за того, что это сложный хеш?

1 Ответ

0 голосов
/ 01 мая 2018

Здесь переписаны три строки, которые вы пытались добавить в хеш с исправленным синтаксисом. Это может быть не тот код, который вам нужен, но он больше не должен выдавать ошибку.

#%{$design} = eastside=>ne;
$design{eastside} = 'ne';

#$design{box}->{eastside}=Data=>ne;
$design{box}{eastside} = {data => 'ne'};

#%{$design}{box}={eastside=>Data=>ne};
$design{box} = {eastside => {Data => 'ne'}};

Моя первоначальная мысль была, вероятно, неосновной из-за того, что ржавый с perl: Похоже, что хеш, $ design, с которого вы начинаете, это вывод Dumper, а не фактический синтаксис perl для определения хеша.

Попробуйте определить хеш следующим образом:

use Data::Dumper;
my %design
$design{'box'}{'ne'} = {'data' => 'north-east'};
$design{'box'}{'n'} = {'data' => 'north'};
$design{'box'}{'nw'} = {'data' => 'north-west'};

print $design{'box'}{'nw'}{'data'};
print "\n";
print Dumper(\%design);

Это должно вывести:

north-west
$VAR1 = {
      'box' => {
                 'n' => {
                          'data' => 'north'
                        },
                 'ne' => {
                           'data' => 'north-east'
                         },
                 'nw' => {
                           'data' => 'north-west'
                         }
               }
    };
...