Автор Тема: подстановка значений  (Прочитано 3617 раз)

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

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
подстановка значений
« : 24 Февраля 2005, 17:36:55 »
помогите пож-ста разобраться, а?

есть хэш:
%h=(\'k2\',\'...\',\'k3\',\'...\',\'k4\',\'...\',\'k5\',\'...\');

из ключей формирую массив:
my @dig = sort {$b cmp $a} keys %h;

существуют хэши:
my %k2 = (\'4\',\'37\', .....);
my %k3 = (\'1\',\'58\', .....);
my %k4  .....

а вот и суть проблемы:
foreach my $d (@dig) { print scalar keys %{$d}; }
есть 0.
был один рабочий вариант, то есть я справилась с этой задачей, но этот вариант требует no strict refs и поэтому мне не подходит. наверняка же есть какое-то красивое решение.
пока-пока. :)

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
подстановка значений
« Ответ #1 : 24 Февраля 2005, 17:45:22 »
Можно упрятать ссылки на твои хэши(или на анонимные) тоже в какой нибудь массив и пройтись уже по нему, либо только no strict \'refs\' для доступа по имени в цикле.
0 OK, 0:1

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
подстановка значений
« Ответ #2 : 24 Февраля 2005, 18:08:18 »
мне кажется, что есть и другой вариант решения:
как-то нужно его заставить видеть именно хэш.
насколько я понимаю в каждой итерации
foreach my $d (@dig) { print scalar keys %{$d}; }
запись должна быть равна такой:
print scalar keys %k2;
print scalar keys %k3; b т.д. но этого не происходит.
может можно как-то символы соединять... вроде... \'%\'.$d...
сейчас попробую...
пока-пока. :)

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
подстановка значений
« Ответ #3 : 24 Февраля 2005, 19:04:55 »
глупость, конечно сказала... ничего не получилось, естевственно.
«проехали...» ;)
так что, получается, что никто не знает как реализовать сие без no strict \'refs\'?
пока-пока. :)

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
подстановка значений
« Ответ #4 : 24 Февраля 2005, 19:09:51 »
Конечно можно, и можно ещё многими способами, но зачем? Я предложил наипростейший и достаточно удобный выриант со ссылками. Сам бы именно им и воспользовался.
0 OK, 0:1

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
подстановка значений
« Ответ #5 : 24 Февраля 2005, 19:12:36 »
my %hash = eval "%{$d}";

Но не проще ли no strict \'refs\'? =)
There Is More Than One Way To Do It (c)

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
подстановка значений
« Ответ #6 : 24 Февраля 2005, 19:21:35 »
ну не знаю... :) может и проще, конечно.
а чем плох вариант my %hash = eval "%{$d}";?
пока-пока. :)

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
подстановка значений
« Ответ #7 : 24 Февраля 2005, 19:39:14 »
Цитировать

а чем плох вариант my %hash = eval "%{$d}";?

Вызов eval EXPR, если верить перлдоку, довольно дорого обходится.
There Is More Than One Way To Do It (c)

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
подстановка значений
« Ответ #8 : 24 Февраля 2005, 19:40:35 »
в общем я сделала с my %hash = eval "%{$d}";
спасибо 2NetFly.
но с удовольствием бы посмотрела другие варианты... :)
пока-пока. :)

 

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