|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Michael Samanov 2:550/5068.1515 10 Jan 2001 20:53:54 To : All Subject : Declare and init hash --------------------------------------------------------------------------------
Hello, All!
Disclaimer: чисто с позиций всяких там извращений. Hеизвращенцев
прошу не беспокоиться.
use strict;
use Data::Dumper;
my @keys = qw(a b c);
my @values = qw(1 2 3);
my %hash;
@hash{@keys} = @values;
print Dumper \%hash;
Теперь начинаем корячиться, пытаясь сделать объявление и
инициализацию хэша в один оператор. Сразу предупреждаю, что
%hash = (a => 1, b => 2, c => 3) не подходит по условию задачи,
а %hash = @keys => @values - просто не работает как надо.
Для начала проверяем такую вот фигню:
my $href = \my %hash;
@{$href}{@keys} = @values;
print Dumper \%hash;
Это работает.
# Вариант нумбер 1
@{my $href = \my %hash}{@keys} = @values;
# Вариант нумбер 2
@{\my %hash}{@keys} = @values;
print Dumper \%hash;
Хоть в первом варианте, хоть во втором perl ругается, что в
строчке с Dumper-ом %hash не объявлен. Видимо, он считает
фигурные скобки вокруг \my %hash блоком со своей областью
видимости :-(
Конечно, есть еще такой вот способ:
my %hash = map { $keys[$_] => $values[$_] } (0..$#keys);
но он мне не нравится.
В общем, уже лет 20-25 бьюсь над этой очень важной и насущной
проблемой, но пока что безуспешно...
Sincerely yours, Michael (mailto:mike@vlink.ru).
--- ifmail v.2.14
* Origin: Mike's home (2:550/5068.1515@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/7949ce010bcf.html, оценка из 5, голосов 10
|