Forum Webscript.Ru

Программирование => Perl => Тема начата: AnnA от 24 Февраля 2005, 17:36:55

Название: подстановка значений
Отправлено: AnnA от 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 от 24 Февраля 2005, 17:45:22
Можно упрятать ссылки на твои хэши(или на анонимные) тоже в какой нибудь массив и пройтись уже по нему, либо только no strict \'refs\' для доступа по имени в цикле.
Название: подстановка значений
Отправлено: AnnA от 24 Февраля 2005, 18:08:18
мне кажется, что есть и другой вариант решения:
как-то нужно его заставить видеть именно хэш.
насколько я понимаю в каждой итерации
foreach my $d (@dig) { print scalar keys %{$d}; }
запись должна быть равна такой:
print scalar keys %k2;
print scalar keys %k3; b т.д. но этого не происходит.
может можно как-то символы соединять... вроде... \'%\'.$d...
сейчас попробую...
Название: подстановка значений
Отправлено: AnnA от 24 Февраля 2005, 19:04:55
глупость, конечно сказала... ничего не получилось, естевственно.
«проехали...» ;)
так что, получается, что никто не знает как реализовать сие без no strict \'refs\'?
Название: подстановка значений
Отправлено: ondr от 24 Февраля 2005, 19:09:51
Конечно можно, и можно ещё многими способами, но зачем? Я предложил наипростейший и достаточно удобный выриант со ссылками. Сам бы именно им и воспользовался.
Название: подстановка значений
Отправлено: 2NetFly от 24 Февраля 2005, 19:12:36
my %hash = eval "%{$d}";

Но не проще ли no strict \'refs\'? =)
Название: подстановка значений
Отправлено: AnnA от 24 Февраля 2005, 19:21:35
ну не знаю... :) может и проще, конечно.
а чем плох вариант my %hash = eval "%{$d}";?
Название: подстановка значений
Отправлено: 2NetFly от 24 Февраля 2005, 19:39:14
Цитировать

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

Вызов eval EXPR, если верить перлдоку, довольно дорого обходится.
Название: подстановка значений
Отправлено: AnnA от 24 Февраля 2005, 19:40:35
в общем я сделала с my %hash = eval "%{$d}";
спасибо 2NetFly.
но с удовольствием бы посмотрела другие варианты... :)