Как я могу создать новую пустую ссылку на хеш в Perl? - PullRequest
10 голосов
/ 23 февраля 2010

Скажи, что у меня было что-то вроде:

# %superhash is some predefined hash with more than 0 keys;
%hash = ();
foreach my $key (keys %superhash){
    $superhash{ $key } = %hash;
    %hash = ();
}

Будут ли все ключи суперхеша указывать на один и тот же пустой хеш, к которому обращается %hash, или они будут разными пустыми хешами?

Если нет, как я могу убедиться, что они указывают на пустые хэши?

1 Ответ

18 голосов
/ 23 февраля 2010

Вам нужно использовать оператор \, чтобы получить ссылку на множественный тип данных (массив или хэш), прежде чем вы сможете сохранить его в одном слоте. Но в приведенном примере кода, если на него есть ссылка, каждый будет одним и тем же хешем.

Способ инициализации вашей структуры данных:

foreach my $key (keys %superhash) {
    $superhash{ $key } = {}; # New empty hash reference
}

Но такая инициализация в основном не нужна в Perl из-за автовивификации (создание соответствующих объектов контейнера, когда переменная используется в качестве контейнера).

my %hash;

$hash{a}{b} = 1;

Теперь %hash имеет один ключ, 'a', который имеет значение анонимного hashref, содержащего пару ключ / значение b => 1. Массивы автовивифицируются таким же образом.

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