PERL - статьи

       

Хэш хешей массивов


Допустим в информации есть двойная степень вложенности, т.е. допустим 20 строк air и в этих 20 строках есть подкатегории по номерам, т.е. 20 строк состоят из трехподгрупп air,mumbra, air,kukumbra и air,telepuzikoff(on):

air,Acmar,one

air,Acmar,two

air,Airwell,one

air,Airwell,two

air,Ariston,one

air,Ariston,two

air,Ariston,three

air,Ariston,four

air,Mumbra,one

air,Mumbra,two

fridg,Ardor,one

fridg,Ardor,two



fridg,Ardor,three

fridg,Ardo-Young,one

fridg,Ardo-Young,two

fridg,Ardo-Young,three

wei,Tefal,one

wei,Tefal,two

wei,Tefal,three

Структурировать такую информацию можно при помощи гибрида хеша хешей и хеша массивов, т.е. хеша хешей массивов:

#!/usr/bin/perl

open F, "<example" or die "can open: $!\n"; @mass=<F>; close F;

for $gr(grep{!$_{$_}++} map{/^(.*?),/} @mass){

for $line(@mass){push @{$hash{$gr}{$1}}, $2 if $line=~m!^$gr,(.*?),(.*)!}

}

print "name hash\tkeys\t\tmassives\n\n";

for $a(sort keys %hash){

print "hash $a: \n\t{\n\t";

for $key(sort keys %{$hash{$a}}){

print "'$key' \t => [ ";

print join " | " => @{$hash{$a}{$key}};

print " ]\n\t";

}

print "}\n";

}

на выходе такая программа выдаст:

name hash keys massives

hash air:

{

'Acmar' => [ one | two ]

'Airwell' => [ one | two ]

'Ariston' => [ one | two | three | four ]

'Mumbra' => [ one | two ]

}

hash fridg:

{

'Ardo-Young' => [ one | two | three ]

'Ardor' => [ one | two | three ]

}

hash wei:

{

'Tefal' => [ one | two | three ]

}

Доступ к определенному элементу массива можно получить, указывая явно набор ключей ${$hash{$a}{$key}}[$n], где $n < $#{$hash{$a}{$key}}



Содержание раздела