Автор Тема: Задачка на тему хэшей массивов  (Прочитано 2982 раз)

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

Оффлайн Range

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Задачка на тему хэшей массивов
« : 25 Января 2005, 23:43:56 »
Задача: получить хэш где значения будут явными массивами, а не ссылками, т.к. переменная массива (models) меняется. Вывести содержимое...

Вот собственно код:


#!/usr/local/bin/perl -w

$firm="aaa";
@models=(\'a\',\'b\',\'c\',\'d\');
$clean_links{$firm}=\\@models;
$firm="aa1";
@models=(\'a\',\'b\',\'c\');
$clean_links{$firm}=\\@models;

@mym=@{$clean_links{"aaa"}};




print "Content-type: text/html; charset=windows-1251\\n\\n";

print $mym[0].$mym[1].$mym[2];



С ссылками данный код работает, но в каждом значении хэша одно и то же значение по адресу ссылки на массив models. Если сделать присвоение явным $clean_links{$firm}=@models; то при выводе хэша получаем вместо массива ссылку на него, разыменуем ссылку - получим ссылку на хэш... ничего не пойму :(

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
Задачка на тему хэшей массивов
« Ответ #1 : 26 Января 2005, 10:50:19 »
$firm="aaa";
@models=(\'a\',\'b\',\'c\',\'d\');
$clean_links{$firm}=[@models];
$firm="aa1";
@models=(\'a\',\'b\',\'c\');
$clean_links{$firm}=[@models];
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
Задачка на тему хэшей массивов
« Ответ #2 : 26 Января 2005, 12:28:36 »
Если присваивание @models выполняется непосредственно в коде,  хорошим стилем программирования считается использование нескольких временных переменных (в данном случае двух). Правильное решение (создание анонимной ссылки на массив) было дано выше, но для конкретной задачи можно обойтись вообще без временных переменных.


$firm="aaa";
$clean_links{$firm}=[\'a\',\'b\',\'c\',\'d\'];
$firm="aa1";
$clean_links{$firm}=[\'a\',\'b\',\'c\'];

Или совсем коротко:

$clean_links = { aaa => [qw(a b c d)], bbb => [qw(a b c)] };
There Is More Than One Way To Do It (c)

 

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