Forum Webscript.Ru

Программирование => Perl => Тема начата: Elenka от 26 Сентября 2005, 23:06:25

Название: Как обращаться к ссылке, которая является ключом хеша ?
Отправлено: Elenka от 26 Сентября 2005, 23:06:25
Вот что требуется...

имеется массив @array1

хеш, ключами которого являются ссылки на массив...

допустим $hash{\\$array[0]}=1;

При выводе дает ошибку...

for(keys %hash)
{
  print ${$_};
}


Can\'t use string ("SCALAR(0x8626d3c)") as a SCALAR ref while "strict refs" in use


В чем проблема ? при юзании рефов в качестве значения хеша все прекрасно работает, а вот ключи он не хочет и все...

спасибо
Название: Как обращаться к ссылке, которая является ключом хеша ?
Отправлено: Elenka от 26 Сентября 2005, 23:46:53
так, найден модуль для этого дела

use Tie::RefHash;

правда strict ругается на конструкцию tie %h, \'Tie::RefHash\';
говорит не определена %h. без него работает
Название: Как обращаться к ссылке, которая является ключом хеша ?
Отправлено: commander от 27 Сентября 2005, 09:23:58
Elenka
print $hash{$_}; ?
Название: Как обращаться к ссылке, которая является ключом хеша ?
Отправлено: Ivan Kolesnikov от 27 Сентября 2005, 10:44:50
Дело в том что Perl преобразует автоматически все ключи хеша в строки (в том числе и ссылки). Я бы использовал другую конструкцию: вспомогательный хеш, в котором в качестве ключей было строковое представление ссылки, а в качестве значения сама ссылка.


use strict;
my ($a, $b, $c) = (1,2,3);

my %ref_values = (
  \\$a => \\$a,
  \\$b => \\$b,
  \\$c => \\$c
);

my %hash = (
  \\$a => \'a\',
  \\$b => \'b\',
  \\$c => \'c\'
);

foreach (keys %hash) {
  print ${$ref_values{$_}}, "\\n";
};