Получение ссылок на хэши
Проблема
Требуется работать с хэшем по ссылке. Например, ссылка может передаваться функции или
входить во внешнюю структуру данных.
Решение
Получение ссылки на хэш:
$href = \%hash;
$anon_hash = { "key1" => "value1", "key2" => "value2", ... };
$anon_hash_copy = { %hash };
Разыменование ссылки на хэш:
%hash = %$href;
$value = $href->{$key};
@slice = @$href {$key1, $key2, $key3}; # Обратите внимание: стрелки нет!
@keys = keys %$hash;
Проверка того, является ли переменная ссылкой на хэш:
if (ref($someref) ne 'HASH') {
die "Expected a hash reference, not $someref\n";
}
Комментарий
Следующий пример выводит все ключи и значения двух заранее определенных хэшей:
foreach $href ( \%ENV, \%INC ) { # ИЛИ: foreach $href ( \(%ENV, %INC) ){
foreach $key ( keys %$href ) {
print "$key => $href->{$key}\n";
}
}
Операции со срезами хэшей по ссылке выполняются так же, как со срезами массивов. Например:
@values = @$hash_ref{"key1", "key2", "key3"};
for $val (@$hash_ref{"key1", "key2", "key3"}) {
$val += 7; # Прибавить 7 к каждому значению в срезе хэша
}
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|