J'ai deux hash de hash que j'aimerais fusionner.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
my %hash1 = (	'orgaA'	=>	{
						'valA'	=>	1,
						'valB'	=>	0,
						'valC'	=>	1,
 
				},
		'orgaB'	=>	{
						'valA'	=>	0,
						'valD'	=>	1,
						'valE'	=>	1,
 
				},
		'orgaC'	=>	{
						'valD'	=>	0,
						'valE'	=>	1,
						'valG'	=>	0,
				}
);
my %hash2 = (	'orgaA'	=>	{
						'valR'	=>	1,
						'valB'	=>	0,
						'valT'	=>	1,
 
				},
		'orgaB'	=>	{
						'valI'	=>	1,
						'valE'	=>	1,
 
				},
		'orgaD'	=>	{
						'valD'	=>	1,
						'valE'	=>	1,
				}
);
J'aimerais obtenir un hash unique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
my %hash = (
	'orgaA'	=>	{
				'valA'	=>	1,
				'valB'	=>	0,
				'valC'	=>	1,
				'valR'	=>	1,
				'valT'	=>	1,
			},
	'orgaB'	=>	{
				'valA'	=>	0,
				'valD'	=>	1,
				'valE'	=>	1,
				'valI'	=>	1,
			},
	'orgaC'	=>	{
				'valD'	=>	0,
				'valE'	=>	1,
				'valG'	=>	0,
			},
	'orgaD'	=>	{
				'valD'	=>	1,
				'valE'	=>	1,
			},
)

J'ai écrit un programme faisant ce que je veux, j'affiche à l'écran mon hash unique et je peux ensuite le copier coller dans mon programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# key list of primary keys
my @prim_keys = keys %hash1;
push @prim_keys, keys %hash2;
my %prim_keys_list;
map{$prim_keys_list{$_} = 1;}@prim_keys;
 
print 'my %hash = ('."\n";
foreach my $key1 (sort keys %prim_keys_list){
 
	print "\t".q{'}.$key1.q{'}."\t=>\t{\n";
 
	# key list of secondary keys
	my %sec_keys_list;
 
	if (exists $hash1{$key1}){
		foreach my $k (keys %{$hash1{$key1}}){
			$sec_keys_list{$k} = ${$hash1{$key1}}{$k};
		}
	}
	if (exists $hash2{$key1}){
		foreach my $k (keys %{$hash2{$key1}}){
			$sec_keys_list{$k} = ${$hash2{$key1}}{$k};
		}
	}		
 
	foreach my $key2 (sort keys %sec_keys_list){
		print "\t\t\t\t".q{'}.$key2.q{'}."\t=>\t$sec_keys_list{$key2},\n";
	}
	print "\t\t\t},\n";
}
print ")\n";


J'aimerais savoir si certains modules permettant cela n'existeraient pas.

J'aimerais également savoir quelle est la meilleure façon de procéder sachant que :
mon première tableau possède 20 clés 'primaires' (orga) et 309 clés 'secondaires' (val).
mon second possède 24 clés 'primaires' et 459 clés 'secondaires'.

Quand on a cette ordre de grandeur de données, comment vaut-il mieux les stocker? Créer directement le hash dans le script est-il une bonne méthode où vaut-il mieux stocker les données dans un fichier que le programme va récupérer afin de créer lui même le hash. A partir de combien de clés est-il préférable de passer par un fichier?



Merci pour vos conseils,