LINUX.ORG.RU

двухмерный массив и Perl-DBM


0

0

Есть задача, раз в час запускается скрипт который выполняет некоторые действия по группам. Надо вести статистику результотов.
К примеру есть файл правил

[dejstvije1]
cp aaa bbb
mv aaa ~/tmp/

[dejstvije2]
rm aaa
mv bbb ccc

Хотелось бы в конце дня иметь статистику, сколько раз удачно завершилось каждое из действий.
Для этого я подумал хорошо бы при выполнении скрипта результаты сразу-же писать в DBM хеш, при этом, есчё лучшу было бы, чтоб этот хеш был двухмерным, то-есть такого вида:
$h{'dejstvije1'}{cp aaa bbb}=....(число сработавших раз)
$h{'dejstvije1'}{cp aaa ~/tmp/}=....(число сработавших раз)

вот, возможно ли это использую DBM

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

$h{'a0'}{bin}="BIN";
$h{'a0'}{term}="TERM";
$h{'a1'}{bin}="BIN1";
$h{'a1'}{term}="TERM1";


while ( ($key,%t) = each %h) {
print $key;
while ( $k,$value = each %t) {
print " $k -> $value\n";
}
}

Выводит:
a1 -> HASH(0x804cc3c)
a0 -> HASH(0x804ce04)

Тут должно быть приобразование типов?









★★

for $i (keys %h) {
        for  $j (keys %{$h{$i}}) {
                print "$i -> $j -> $h{$i}{$j} \n";
        }
}

chucha ★★★☆
()

$h{'a0'}{bin}="BIN";
$h{'a0'}{term}="TERM";
$h{'a1'}{bin}="BIN1";
$h{'a1'}{term}="TERM1";

while (($key, $t) = each %h) {
        print "$k -> $val\n"
                while ($k, $val) = each %$t;
}

$h{a0} - это не hash, а scalar (reference).
и про скобки не забывать, чтобы лист контекст
был.

idle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.