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 .................
...................................
perl: hash-list
Код:
Необходимо для каждого текстового блока, граница между которыми обозначена пустой строкой, создать хеш, запихнув туда данные блока, ссылки на хеши хранятся в массиве. Я делаю так:
Код:
#$_[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 ;
}
}
};
#$_[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 должен содержать ссылки на хеши
my $FILE;
open($FILE, "/home/file.txt")
or die "cannot open file\n";
$get_hashes->(\@hash_list, $FILE, "\n", ":");
#теперь hash_list должен содержать ссылки на хеши
Выдаёт чушь.. Не могу найти, где я невнимателен..
hint: что такое $get_hashes?