Bonjour à tous,
encore une petite question existentielle !
je suis en train de faire un petit programme un peu complexe (ça change des trucs qui font 20 lignes ^^) et je suis parti sur une table de hashage pour stocker tous mes paramètres.
Pour faire simple, mon programme se connecte à plusieurs environnements et réalise des comparaisons pour décrire ce qui est différent entre les environnements.
Mon idée était donc de stocker les informations nécessaires pour se connecter dans une table de hash dont le premier niveau serait l'environnement, le second, la variable et le troisième, la valeur, le libellé de la variable et 2/3 autres infos, ce qui doit ressembler à ceci :
Ca marche niquel, sauf que j'ai un petit problème fonctionnel : je voulais faire une fonction d'initialisation qui boucle sur les clés du hash $GP{<env>} et qui demande à l'utilisateur de saisir la valeur souhaitée (et alimente $GP{<env>}{$clé}{value} en fonction).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 $GP = { dev => { db_server => { value => '<dev_server>', label => 'Serveur BDD'}, db_port => { value => '<dev_port>', label => 'Port Serveur BDD'}, db_name => { value => '<dev_ame>', label => 'Nom BDD'}, }, test => { db_server => { value => '<test_server>', label => 'Serveur BDD'}, db_port => { value => '<test_port>', label => 'Port Serveur BDD'}, db_dbname => { value => '<test_dbname>', label => 'Nom BDD'}, } };
Le hic, c'est que comme c'est un hash, il va me demander les trucs dans n'importe quel ordre, et ça fait pas très pro (c'est pas classe de demander un password avant un utilisateur)
J'avais contourné le problème une première fois en créant un tableau que j'alimente manuellement pour mettre les clés de mon hash dans l'ordre que je souhaitais, et ensuite, j'utilisais ce tableau pour parcourir mon hash.
Mais bon, côté propreté, c'est pas idéal... en plus, faut penser à le mettre à jour ce tableau.
Du coup, je suis parti sur un mix des deux avec un tableau de hash. Mais c'est quand même moins lisible
Exemple illustrant mes 3 solutions :
Ma question, comment feriez-vous ? ^^
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 use Data::Dumper; use strict; use warnings; # ################### debut test gestion hash my %GP; my $env='default'; print "V1 : lecture simple du hash (désordre)\n"; $GP{$env} = { db_server => { value => '<db_server>', label => 'Serveur BDD'}, db_port => { value => '<db_port>', label => 'Port Serveur BDD'}, db_dbname => { value => '<db_dbname>', label => 'Nom BDD'}, }; foreach my $param (keys %{$GP{$env}}) { print $GP{$env}{$param}{label}," [",$GP{$env}{$param}{value},"] ?\n"; } print "\nV2 : hash + tableau (ordre ok)\n"; my @GP = qw (db_server db_port db_dbname); $GP{$env} = { db_server => { value => '<db_server>', label => 'Serveur BDD'}, db_port => { value => '<db_port>', label => 'Port Serveur BDD'}, db_dbname => { value => '<db_dbname>', label => 'Nom BDD'}, }; foreach my $param (@GP) { print $GP{$env}{$param}{label}," [",$GP{$env}{$param}{value},"] ?\n"; } print "\nV3 : tableau de hash (ordre ok)\n"; $GP{$env} = [ {db_server => { value => '<db_server>', label => 'Serveur BDD'}}, {db_port => { value => '<db_port>', label => 'Port Serveur BDD'}}, {db_dbname => { value => '<db_dbname>', label => 'Nom BDD'}}, ]; foreach (@{$GP{$env}}) { my ($var, $hash) = each(%$_); print $hash->{label}," [",$hash->{value},"] ?\n"; }
Merci d'avance !
Partager