PERL - статьи


Доступ к элементам


Проверка хэша на наличие элемента:

%hash = (

'шляпа' => 'серая',

'водка' => 'горькая',

'вобла' => 'вкусная');

if(exists($hash{"дождь"})){

print "Элемент найден";

}

else{

print "Элемент не найден";

}

Удалить элемент из хэша можно при помощи функции delete:

%hash = (

'шляпа' => 'серая',

'водка' => 'горькая',

'вобла' => 'вкусная');

delete($hash{"шляпа"});

if(exists($hash{"шляпа"})){

print "Элемент найден";

}

else{

print "Элемент не найден";

}

Функция delete может вызываться для среза хэша, что приводит к удалению всех указанных ключей:

delete @hash{'шляпа','водка','вобла'}; см. perlfunc(1)

Если нужно найти совпадающие ключи или не входящие в другй хэш, то надо организовать перебор ключей хэша при помощи keys и проверять, если ли текущий ключ в другом хэше. Поиск совпадающих ключей:

my @common = ();

foreach(keys %hash1){

push(@common, $_) if exists $hash2{$_};

}

Поиск ключей, отсутствующих в другом хэше:

my @test = ();

foreach(keys %hash1){

push(@test, $_) unless exists $hash2{$_};

}

Если keys вызывается для хэша, ключи которого представляют собой ссылки, то возвращаемые ей ссылки не работают. Ключи преобразуются в строки, т.е. интерпретируются так, словно они заключены в кавычки, при работе со ссылками они теряют свои свойства. После преобразования в строку ссылка имеет вид

Class::Somewhere=HASH(0x72048)

ARRAY(0x72048)

Преобразованную ссылку нельзя вернуть к прежнему виду, т.к. она из ссылки превратилась в строку. Нужно создать специальный хэш, ключами которого являются ссылки, преобразованные в строки, и значениями - настоящие ссылки.Можно воспользоваться модулем Tie::RefHash. Пример показывает использование объектов ввода/вывода для работы с файловыми манипуляторами.

use Tie::RefHash;

use IO::File;

tie %name, "Tie::RefHash";

foreach $filename("/etc/termcamp/", "/vminux", "/bin/cat"){

$fh = IO::File->("<$filename") or next;




Начало  Назад  Вперед



Книжный магазин