Получение ссылок на хэши

Проблема

Требуется работать с хэшем по ссылке. Например, ссылка может передаваться функции или входить во внешнюю структуру данных.

Решение

Получение ссылки на хэш:
$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 к каждому значению в срезе хэша
}

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: