====== %hash ====== У цій статті описані основні функції та правила синтаксису для роботи з хешами в Perl. Хеш - це асоціативний масив, оскільки звернення до його значень здійснюється за допомогою скалярних ключів, а не його числових індексів. В інших мовах програмування хеші називають інакше, наприклад, просо асоціативними масивами, словниками, списками або картами. Хеш — це невпорядкована група пар ключ-значення. Ключі є унікальними струнами. Значення є скалярними значеннями. Кожне значення може бути числом, рядком або посиланням. Кожен хеш-ключ пов’язаний з одним значенням , і всі ключі є унікальними всередині однієї хеш-структури. Це означає, що повторювані ключі заборонені. Хеші, як і інші змінні Perl, оголошуються за допомогою ключового слова **my**. Назві змінної передує знак відсотка ( **%** ). Це невеликий мнемонічний трюк, який допоможе вам нагадати про структуру ключ-значення. Хеші є одним з основних типів даних Perl. Хеші поділяють на однорівневі та багаторівневі. Також можуть зберігатись в своїй формі (%hash) або в формі посилання ($hashref). Хеш є найкращим типом даних для комунікації між складними функціями, коли функція може повертати різний тип даних або їх кількість. Також, при такому підході, вам буде легко вдосконалювати ваші програми з можливістю збереження функціонування між різними версіями. ===== Оголошення, ініціалізація та очищення ===== ==== Оголошення (декларування) ==== виконується без присвоєння значень, наступним чином: my %hash; зазвичай це використовують для того, щоб відкрити змінну в певній області видимості, коли присвоєння виконується в різнорівневих блоках. ===== Очищення ===== Якщо в процесі виконання програми, вам потрібно очистити або знищити хеш, робіть це так: %hash = (); або так: %hash = undef; Насправді, оголошену змінну не можливо видалити, а лише очистити для звільнення оперативної пам'яті або для повторного використання з новими даними. ==== Ініціалізація (присвоєння) ==== Ініціалізація це присвоєння пустій змінній якогось значення: %hash = (); Оголошення та ініціалізацію можна об'єднати в одну команду, зразу присвоївши значення: my %hash = (); Подібно до синтаксису для масивів, хеші також можуть бути оголошені за допомогою списку значень, розділених комами: my %hash = ('monday', 65, 'tuesday', 68, 'wednesday', 71, 'thursday', 53, 'friday', 60); У наведеному вище коді Perl приймає перший запис у списку як ключ («monday»), а другий запис — як значення цього ключа (65). Третій запис у списку («tuesday») буде оголошено як ключ, а четвертий запис (68) як його значення тощо. Оператор «**жирна кома**» виглядає як стрілка ('**=>**') і дозволяє оголошувати пари значень ключів замість коми. Це робить код більш чистим і читабельним. Крім того, під час використання жирної коми не потрібно брати рядки в лапки для ключів. Використовуючи жирну кому, те саме оголошення %hash виглядатиме так: my %hash = ( monday => 65, tuesday => 68, wednesday => 71, thursday => 53, friday => 60, ); Все вищезгадане також підходить для форми посилання ($hashref), замінивши "%" на "$" та прості дужки "()" на фігурні "{}". ===== Наповнення, зміна та видалення ===== * ключем може бути будь-який скаляр. * ключ може бути переданий в змінній. * якщо ключ має в собі пробіл або назву оператора - його необхідно взяти в лапки. * значення може бути переданий в змінній. * числове значення треба передавати без лапок. * рядкове значення треба передавати в лапок. * результат обрахунку - в простих жужках. * результат функції - виклик функції. * масив або хеш - екранувати символом "\". При зверненні до елементу хешу по ключу в контексті хешу (%hash), необхідно замінити "%" на "$" та у фігурні дужки "{}" вказати ключ: $hash{key} = 'value'; При зверненні до елементу посилання по ключу в контексті посилання ($hashref), необхідно після назви посилання вставити '->' та у фігурні дужки "{}" вказати ключ: $hashref->{key} = 'value'; так відбувається присвоєння та зміна значень за ключем. За такими ж правилами відбувається видалення елементів по ключу, вказавши попереду оператор **delete** та забравши присвоєння: delete $hash{key}; delete $hashref->{key}; Також при видаленні можна зберігати значення в іншу змінну, наприклад в скаляр: my $a = delete $hash{key}; my $a = delete $hashref->{key}; Таким чином в змінну $a буде збережено значення, яке було видалено з хешу (посилання).