Автор Тема: Как обращаться к ссылке, которая является ключом хеша ?  (Прочитано 2994 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Elenka

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 83
  • +0/-0
  • 0
    • Просмотр профиля
    • http://soccercleats.blogs.sapo.pt
Вот что требуется...

имеется массив @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

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 83
  • +0/-0
  • 0
    • Просмотр профиля
    • http://soccercleats.blogs.sapo.pt
так, найден модуль для этого дела

use Tie::RefHash;

правда strict ругается на конструкцию tie %h, \'Tie::RefHash\';
говорит не определена %h. без него работает

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Elenka
print $hash{$_}; ?
And no religion too...

Оффлайн Ivan Kolesnikov

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Дело в том что 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";
};

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28