четверг, 24 сентября 2015 г.

Упрощаем доступ к хешу по ключу, с использованием $; переменной

use strict;
use warnings;

$\="\n";

# Предположим, что имеется некоторый хеш, ключи которого выглядят так:

my %foo = (
    'Close|___|your|___|window' => 'Closed',
    'Open|___|the|___|door'     => 'Opened',
    'Just|___|three|___|words'  => 'Amazing' 
);

# т.е. в имени ключа используется разделитель '|___|'.
# И для того, чтобы не писать весь этот ужас каждый раз в имени ключа,
# перл предоставляет небольшое упрощение для данной задачи.
# К примеру, вместо вот этого:

print $foo{'Open|___|the|___|door'};
print $foo{'Just|___|three|___|words'};

print '-' x 15;
# можно написать вот так:

$; = '|___|'; # в данной ситуации эта волшебная переменная,
                  # позволяет настраивать разделитель
                  # для доступа к элементам хеша по ключу.
print $foo{'Open', 'the', 'door'};
print $foo{'Just', 'three', 'words'};

# но можно сделать еще более читабельным наименование ключа:
print $foo{qw/Close your window/};

# Итог, при любом способе, будет предсказуем:
#
# Opened
# Amazing
# ---------------
# Opened
# Amazing
# Closed

2 комментария:

  1. Вот ведь жесть-то. Никогда так не делайте.

    ОтветитьУдалить
  2. Как говорит документация к этой переменной: Consider using "real" multidimensional arrays as described in perllol.

    ОтветитьУдалить