[PERL] Nom de Variable Dynamique
Bonjour,
Je suis une débutante en langage PERL.
Je souhaiterai savoir comment avec un incrément $i créer des noms de variables dynamiquement.
Je me perds dans la syntaxe.
Ce serait pour utiliser des noms de tableaux de hashage % différents en référence \ dans un tableau @.
Je ne sais pas si je suis claire.
Merci d'avance.
[PERL] Nom dynamique d'un tableau de hashage
Je suis désolée si je n'ai pas été claire dans ma question et aussi de ne pas avoir fourni de code aux 'forumeurs'.
Je lis les données d'un fichier MVS que je souhaite récupérer dans un tableau de référence de hashage.
Voila.
'Code suite aux réponses'
Code:
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| #!/usr/bin/perl -w
use strict;
use DBI qw(:sql_types);
use Date::Calc qw(:all);
#Déclarations
my $fichier_donnees;
my $erreur;
my $FICHIER_MVS;
open($FICHIER_MVS, $fichier_donnees) or $erreur = "Echec à l'ouverture du fichier de données";
if ($erreur ne '') {$req = '';fin();}
comptage_MVS();
close($FICHIER_MVS) or $erreur = "Echec de fermeture du fichier $FICHIER_MVS \n";
if ($erreur ne '')
{
exit 1;
}
exit 10;
sub comptage_MVS
{
no strict 'vars';
my $lignes;
my $organisme;
my $site;
my $annee;
my %tabhash;
my @tab_lignesMVS;
my $i; # permet l'utilisation d'un tableau de données pour affecter ligne à ligne
my $compteur_lignesMVS; #nb total de lignes
my $cle;
my $valeur; #Usage par le hashage
$i = 0;
while ($lignes = <$FICHIER_MVS>)
{
chomp ($lignes);
$i++;
############ Affectation des valeurs par clé de hashage du tableau de hashage
${"tabhash$i"}{SITE} = substr($lignes, 0,4);
${"tabhash$i"}{ANNEE} = substr($lignes, 4, 4);
${"tabhash$i"}{ORGANISME} = substr($lignes, 8, 3);
############ Affectation ligne à ligne
$tab_lignesMVS[$i] = \%{"tabhash$i"};
}#while
$compteur_lignesMVS = $i;
# Parcours du tableau de hashage
$i = 0;
do
{
foreach $cle (keys %{$tab_lignesMVS[$i]})
{
if ($cle eq 'SITE')
{
$site = $valeur;
}
if ($cle eq 'ANNEE')
{
$annee = $valeur;
}
if ($cle eq 'ORGANISME')
{
$organisme = $valeur;
}
}
}
$i++;
}
until ((($site eq 'S173') && ($annee eq '2006') && ($organisme eq '004')) || ($i = $compteur_lignesMVS));
} |
Mon problème est que :
dans les lignes suivantes, si je laisse comme ça sans variable dynamique, si je cherche à me balader dans mon tableau @tab_lignesMVS, je ne récupère pour tous les indices que les données de la dernière affectation càd les données du dernier tableau de hashage affecté à @tab_lignes MVS :(
'Code avant réponse'
Code:
1 2 3 4 5
| $tabhash{SITE} = substr($lignes, 0, 4);
$tabhash{ANNEE} = substr($lignes, 4, 4);
$tabhash{ORGANISME} = substr($lignes, 8, 3);
$tab_lignesMVS[$i] = \%tabhash; |
Sur la partie 'Code suite aux réponses', ce qui ne marche c'est l'emploi dans le même programme de et de ou bien je m'y prend mal ...
Si vous avez des suggestions sur la manière d'appréhender mon problème, je suis preneuse !!!
Je vous remercie d'avance pour votre aide.
Merci déjà à GnuVince.