Web Creation - еженедельный сетевой журнал для вебмастеров

   
PERL - Полезные советы: Работа с массивами

Иногда бывает необходимо преобразовать массив чего-либо в хэш-массив. Это можно сделать так:

        %hash = map { $_, 1 } @array;
Например:

        %hash = map { $_, 1 } qw(a b c);
Этот оператор преобразует массив ('a', 'b', 'c') в хэш-массив ('a', 1', 'b', 1, 'c', 1).

Автор: Joseph N. Hall


Предположим, мы имеем http log примерно следующего содержания

        gwa.fr.bosch.de - - [08/Jan/1998:01:50:42 -0700] "GET /ack.html HTTP/1.0" 200 6798
        fwigka.admin.ch - - [08/Jan/1998:01:53:21 -0700] "GET /toc.html HTTP/1.0" 200 10002
и нам хочется сделать хэш-массив, состоящий из первых слова каждой строки, а значением элемента массива - количество повторений этого слова

        @host{/^(\S+)/}++ while <>;
Этот же фрагмент кода можно переписать и в более пространном виде

        while (<>) {          # Считываем одну строку в переменную $_
                my ($addr) = /^(\S+)/;  # Получаем первое слово строки
                $host{$addr}++;         # Увеличиваем счетчик повторений слова
        }
Вот еще подобный фрагмент кода

        %host = map {/^(\S+)/, 1} <>;
Но в этом случае содержимое всего файла считывается в память (<> в контексте списка) перед тем, как продолжить вычисления. Это, конечно, неудобно в случае файла большого размера.

Автор: Joseph N. Hall


Инверсия хэш-массива один-к-одному
Предположим, мы имеем следующий хэш-массив, содержащий информацию о соответствии IP адресов и символьных имен

        %num_to_host = (
                '123.234.1.1' => 'george',
                '123.234.1.2' => 'jane',
                '123.234.1.3' => 'judy'
        );
Таким образом, используя IP адрес в качестве индекса мы можем получить его символьное имя. А как сделать наоборот?

        %host_to_num = reverse %num_to_host;
В случае хэш-массива с отношением один-к-одному мы получим хэш-массив с обратным соответствием, т.е. сможем определять IP адрес имея его символьное имя.

        ('george' => '123.123.1.1',
        'judy' => '123.234.1.3',
        'jane' => '123.234.1.2')

Автор: Joseph N. Hall
Информация взята с сайта Cgi&Perl

 

© журнал принадлежит Web Creation
по всем вопросам обращаться А. Кузьмин