Замена имени хеша на скаляр в Perl - PullRequest
0 голосов
/ 11 марта 2011

У меня есть хеш:

my $normal_hash = {a => '10',};
print $normal_hash;  # prints HASH(0x......)

Я хочу сослаться на этот хеш следующим образом:

my $var = 'normal_hash';
print $$var; 

Это НЕПРАВИЛЬНО, но что мне нужно вставить туда, чтобы получить тот же результат?

Ответы [ 3 ]

3 голосов
/ 11 марта 2011

Вы пытаетесь использовать символические ссылки .

Не делайте этого .

Для получения дополнительной информацииИнформация о символьных ссылках, см. мой ответ на Как использовать символические ссылки в Perl .Первоначальный спрашивающий спросил о typeglobs, поэтому в посте также есть некоторая информация о них.

1 голос
/ 11 марта 2011

Попробуйте:

my $normal_hash = {a => '10',};
print $normal_hash, "\n";
my $var = $normal_hash;
print $var, "\n";

То, что вы делали, называется символической ссылкой, и это не считается наилучшей практикой.

Чтобы увидеть, что у вас в хэше, use Data::Dumper;

use Data::Dumper;
print "\$normal_hash:\n", Dumper $normal_hash;
0 голосов
/ 11 марта 2011

Я надеюсь, что это объясняет принцип:

1: $hsh = { a => 1, b => 2};
2: print "Original Hash: $hsh\n";
3: my $name = 'hsh';
4: print "Hash Name: $name\n";
5: $ref = eval "\$$name";
6: print "Hash resolved from variable name: $ref\n";

Здесь ...

Строка 1 определяет ваш хэш.

Строка 3 определяет $ name, которое содержит имя вашего хэша.

Строка 5 преобразует это имя в хеш-ссылку, которую вы хотите из имени хеш-переменной.

Выходной ...

Original Hash: HASH(0x8bb8880)
Hash Name: hsh
Hash resolved from variable name: HASH(0x8bb8880)

Надеюсь, это поможет.

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