Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

perl: hash-list

1.8K
19 ноября 2008 года
igor_nf
256 / / 13.12.2006
Изучаю перл. Возникли непонятки со сложными структурами данных. К примеру есть текст:
Код:
Record ID: 3
Sensor Name: Watchdog
Group Name: Watchdog 2
Sensor Number: 3
Event/Reading Type Code: 6Fh
Sensor Status: [OK]

Record ID: 4
Sensor Name: Scrty Violation
Group Name: Platform Security Violation
Sensor Number: 4
Event/Reading Type Code: 6Fh
Sensor Status: [OK]

Record ID: 5
Sensor Name: Physical Scrty
Group Name: Platform Chassis Intrusion
Sensor Number: 5
Event/Reading Type Code: 6Fh
Sensor Status: [LAN Leash Lost (system is unplugged from LAN)]

Record ID: 6 .................
...................................

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

Код:
#$_[0] - массив хешей
#$_[1] - дескриптор файла
#$_[2] - разделитель текстовых блоков
#$_[3] - разделитель key/value     ($hash{key} = $value)

$get_hashes = sub {

        if(ref($_[0]) ne "ARRAY" or not defined $_[1]
                or not defined $_[2] or not defined $_[3]) {
                die "method get_hashes() was called with an unspecified \
                argument\n";
        }

        my $i = 0;

        while(<$_[1]>) {
                chomp;
                if($_ eq $_[2]) {
                        ++$i;
                }
                else {
                        my $pattern = $_[3];
                        my ($key, $value) = split(/$pattern/);
                        ${ $_[0] }[$i]->{ $key } = $value ;
                }
        }
};


И вызываю потом так:
 
Код:
my @hash_list;
my $FILE;

open($FILE, "/home/file.txt")
        or die "cannot open file\n";

$get_hashes->(\@hash_list, $FILE, "\n", ":");
#теперь hash_list должен содержать ссылки на хеши


Выдаёт чушь.. Не могу найти, где я невнимателен..
2
20 ноября 2008 года
squirL
5.6K / / 13.08.2003
ммм... какой ужос. поставь use strict, для начала. и увидишь, где чушь выдает.

hint: что такое $get_hashes?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог