Forum Webscript.Ru
Программирование => Perl => Тема начата: 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
В чем проблема ? при юзании рефов в качестве значения хеша все прекрасно работает, а вот ключи он не хочет и все...
спасибо
-
так, найден модуль для этого дела
use Tie::RefHash;
правда strict ругается на конструкцию tie %h, \'Tie::RefHash\';
говорит не определена %h. без него работает
-
Elenka
print $hash{$_}; ?
-
Дело в том что 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";
};