В этом примере на основании списка ключей, возвращенного функцией
В приведенных выше примерах при необходимости обработки ключей хэша в алфавитном порядке они сортировались с помощью функции
foreach $key ( # каждый элемент списка,
sort # отсортированный по порядку
{$hash{$a} cmp $hash{$b}}# значений, ассоциированных
keys %hash) { # с ключами хэша
print "значение:$hash{$key} ключ:$key\n"; # обработать
} # в цикле
Здесь в блоке сравнения функции
Подобно тому, как при работе с массивами срезы позволяют работать со списком элементов, в Perl есть возможность обращаться сразу с несколькими элементами хэша. Это делается с помощью среза хэша. Срез хэша (hash slice) - это список значений хэша, заданный перечнем соответствующих ключей. Он записывается в виде имени хэша с префиксом @ (так как срез - это список), за которым в фигурных скобках перечисляются ключи. Список ключей в срезе хэша можно задать перечислением скалярных значений, переменной-списком или списком, возвращенным функцией. Например, так:
@hash{$key3, $key7, $key1} # срез хэша задан списком ключей
@hash{@key_values} # срез хэша задан массивом
@hash{keys %hash} # то же, что values(%hash)
Если в срезе хэша список ключей состоит из единственного ключа, срез все равно является списком, хотя и из одного значения. Сравните:
@hash{$key} # срез хэша, заданный списком из одного ключа
$hash{$key} # значение элемента хэша, заданное ключом
Поскольку переменная-хэш в составе строки не интерполируется, для вставки в строку всех значений хэша можно воспользоваться срезом хэша:
%hash = ('0' => 'false', '1' => 'true');
"@hash{keys %hash}"; # будет "false true" или "true false"
Срез хэша, как и любой другой список, может стоять в левой части операции присваивания. При этом списку ключей среза должен соответствовать список присваиваемых значений в правой части присваивания. Воспользовавшись срезом, можно добавить в хэш сразу несколько пар или объединить два хэша, добавив к одному другой. Например:
@hash{$k1, $k2, $k3}= ($v1, $v2, $v3); # добавить список
@old{keys %new}= values %new; # добавить хэш %new к %old
С помощью среза хэша и функций
@hash_keys = keys %hash; # сохранить ключи в массиве
@hash_values = values %hash; # сохранить список значений
%hash = (); # очистить хэш
@hash{@hash_values}=@hash_keys; # срезу хэша присвоить список
Исполняющая система Perl предоставляет программисту доступ к специальным ассоциативным массивам, в которых хранится полезная служебная информация. Вот некоторые из специальных хэшей:
%ENV перечень системных переменных окружения (например, PATH)
%INC перечень внешних программ, подключаемых по require или do
%SIG используется для установки обработчиков сигналов от процессов
Например, так при выполнении программы можно использовать значения переменных окружения: перечислить все их значения или выбрать нужные.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии