Je vois un problème dans les arguments que tu donnes à ta fonction :
my ($fichierIn,$chrSize,@fact,$tailleTab,%hashFT) = @_;
Il y a un tableau et un hash dans tes arguments. Il faut savoir que Perl "déroule" les listes de variables car il transmet ses arguments en tant que scalaires.
Ainsi, si $fichierIn et $chrSize récupèrent bien les 2 premiers scalaires, @fact récupère carrément tout ce qui reste dans ton @_
Tu n'aurais eu que ton tableau et pas le hash, je t'aurais bien proposé ceci :
my ($fichierIn,$chrSize,$tailleTab,@fact) = @_;
Le tableau étant positionné en dernier, il récupérait forcément ce qui restait dans @_ et qui, dans ce cas précis, est pour ton tableau.
Quand j'ai un hash (ou plusieurs) ou des listes à transmettre en arguments à une fonction, je procède comme suit :
1 2 3 4
| my ($fichierIn,$chrSize,$fact,$tailleTab,$hashFT) = @_;
# ex. pour afficher le 1er élément de ta liste
print "$fact->[0]"; |
Il faut faire appel à ta fonction en transmettant ta liste et ton hash sous forme de références :
Periode::calculPeriode($fichier,$sizeChr,\@ft,$t,\%hashFactors);
Et là, ça fonctionnera mais fais bien attention à l'exemple que je t'ai donné pour afficher les éléments de ton tableau, n'oublie pas qu'une fois dans ta fonction, tu travailles avec la référence pointant vers ton tableau ou la référence pointant vers ton hash.
Partager