Учебники

Perl — Hashes

Хеш — это набор пар ключ / значение . Хеш-переменным предшествует знак процента (%). Чтобы сослаться на отдельный элемент хеша, вы будете использовать имя переменной хеша, перед которым стоит знак «$», а затем «ключ», связанный со значением в фигурных скобках.

Вот простой пример использования хеш-переменных:

Live Demo

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n";
print "\$data{'Lisa'} = $data{'Lisa'}\n";
print "\$data{'Kumar'} = $data{'Kumar'}\n";

Это даст следующий результат —

$data{'John Paul'} = 45
$data{'Lisa'} = 30
$data{'Kumar'} = 40

Создание хэшей

Хэши создаются одним из двух следующих способов. В первом методе вы присваиваете значение именованному ключу один за другим —

$data{'John Paul'} = 45;
$data{'Lisa'} = 30;
$data{'Kumar'} = 40;

Во втором случае вы используете список, который преобразуется путем взятия отдельных пар из списка: первый элемент пары используется в качестве ключа, а второй — в качестве значения. Например —

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

Для ясности вы можете использовать => в качестве псевдонима для обозначения пар ключ / значение следующим образом:

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

Вот еще один вариант вышеупомянутой формы, посмотрите на нее, здесь всем ключам предшествует дефис (-), и вокруг них не требуется никаких кавычек —

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

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

$val = %data{-JohnPaul}
$val = %data{-Lisa}

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

При доступе к отдельным элементам из хеша, вы должны поставить перед переменной знак доллара ($), а затем добавить ключ элемента в фигурных скобках после имени переменной. Например —

Live Demo

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n";
print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

Это даст следующий результат —

45
30
40

Извлечение ломтиков

Вы можете извлечь фрагменты из хеша так же, как вы можете извлечь фрагменты из массива. Вам нужно будет использовать префикс @ для переменной, чтобы сохранить возвращаемое значение, потому что они будут списком значений —

Live Demo

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

Это даст следующий результат —

Array : 45 30

Извлечение ключей и значений

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

keys %HASH

Эта функция возвращает массив всех ключей именованного хэша. Ниже приведен пример —

Live Demo

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";

Это даст следующий результат —

Lisa
John Paul
Kumar

Точно так же вы можете использовать функцию values, чтобы получить список всех значений. Эта функция имеет следующий синтаксис —

values %HASH

Эта функция возвращает обычный массив, состоящий из всех значений именованного хэша. Ниже приведен пример —

Live Demo

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n";
print "$ages[1]\n";
print "$ages[2]\n";

Это даст следующий результат —

30
45
40

Проверка на существование

Если вы попытаетесь получить доступ к паре ключ / значение из несуществующего хэша, вы обычно получите неопределенное значение, а если у вас включены предупреждения, то вы получите предупреждение, сгенерированное во время выполнения. Вы можете обойти это, используя функцию exist , которая возвращает true, если именованный ключ существует, независимо от его значения.

Live Demo

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

Здесь мы ввели оператор IF … ELSE, который мы изучим в отдельной главе. А пока вы просто предполагаете, что часть if (условие) будет выполняться только тогда, когда данное условие истинно, иначе будет выполнена часть. Поэтому, когда мы выполняем вышеуказанную программу, она дает следующий результат, потому что здесь существует данное условие ($ data {‘Lisa’} возвращает true —

Lisa is 30 years old

Получение размера хэша

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

Live Demo

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

@values = values %data;
$size = @values;
print "2 - Hash size:  is $size\n";

Это даст следующий результат —

1 - Hash size: is 3
2 - Hash size: is 3

Добавить и удалить элементы в хэшах

Добавление новой пары ключ / значение можно выполнить с помощью одной строки кода, используя простой оператор присваивания. Но чтобы удалить элемент из хеша, вам нужно использовать функцию удаления, как показано ниже в примере —

Live Demo

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55;
@keys = keys %data;
$size = @keys;
print "2 - Hash size:  is $size\n";

# delete the same element from the hash;
delete $data{'Ali'};
@keys = keys %data;
$size = @keys;
print "3 - Hash size:  is $size\n";

Это даст следующий результат —