[RESOLUT] Parcourir un tableau de table de hash
Bonjour,
Je debute en Perl et j'ai lu le post qui explique comment trier un tableau de hash...
Mais je reste bloquee.
Voici mon code qui remplie une table de hash :
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
|
sub storeDataToAnalyse {
$link = $_[0];
open(CROCOMAIL, MAIL_TMP_FILE) || die ("Erreur d'ouverture de CROCOMAIL") ;
print "Data to nanlyse for $link:\n";
%datalines = ();
while (my $line = readline(CROCOMAIL)) {
if ($line =~ "Link Percentage") {
last;
}
}
while (my $line = <CROCOMAIL>) {
if ($line =~ $link) {
$line = (<CROCOMAIL>);
for ($i = 0, $j = 0; $line = <CROCOMAIL>; $i++) {
if ($line =~ /^\s*$/) {
last;
}
if ($i > 1) {
($mb, $ips, $ipd) = split (/;/, $line);
$datalines{$j}{ 'Mbyte' } = $mb;
$datalines{$j}{ 'IPSource' } = $ips;
$datalines{$j}{ 'IPDest'} = $ipd;
$j++;
}
}
last;
}
}
close(CROCOMAIL);
chomp (%datalines);
print "return:".\$datalines."\n";
return \%datalines;
} |
Voici le code qui appel storeDataToAnalyse et qui derait lire la table retourner et l'ajouter a un tableau :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
my $data2 = ();
my $size = @$link_analyse;
my @finaldata = ();
for (my $k=0; $k < $size; $k++) {
$data2 = storeDataToAnalyse("$link_analyse->[$k][0]");
$finaldata[$k] = $data2;
$pp = $finaldata[$k];
chomp (%datalines);
my $sz = keys(%datalines);
for (my $kk = 0; $kk < $sz ; $kk++) {
print "Mbyte:$datalines{$kk}{'Mbyte'} IPSource:$datalines{$kk}{'IPSource'} IPDest:$datalines{$kk}{'IPDest'}";
print "pp11 = $pp{$kk}{'Mbyte'}\n"
}
print "!!!!!!!!!!!!!!finaldata :".$pp."\n";
my $sizetot = @finaldata;
print "sissetot=$sizetot\n";
} |
voila mes trois problemes :
1/ si je limite la portee de %dataline avec "my" dans storeDataToAnalyse et que j'utilise data2, je n'arrive pas a faire le print.
Je pense clairement que quelque chose m'echappe avec les references...
2/ print "!!!!!!!!!!!!!!finaldata :".$pp."\n"; affiche "!!!!!!!!!!!!!!finaldata :HASH(0x1860ae4)
alors que
print "return:".\$datalines."\n"; affiche "return SCALAR(0x183c8f4)"
3/print de $finaldata[$k] et de $pp{$kk}{'Mbyte'} n'affiche rien...
Malgres mes lectures de tuto, il y a clairement quelque chose que je n'ai pas compris dans les bases...
J'espere avoir etait clair dans l'explication de mon probleme :/
Merci d'avance pour votre aide!