passage de paramètre référence à un sous programme
4 réponses
fr6
Bonsoir,
Je ne comprends pas ce qui ne marche pas ici - qui doit =EAtre simple.
Dans le programme pl d'appel je d=E9calre une r=E9f=E9rence =E0 un hachage =
:
$refhash =3D {};
J'appel le sous programme avec cette r=E9f=E9rence en param=E8tre :
MonPackage::monSousProgram( $refhash );
Je v=E9rifie que dans monSolusProgramme ref($refhash) est bien un
hachage : HASH(0x229b9c) - non nul.
Mais avant cet appel, dans le programme appelant, j'ai ref($refhash)
qui est nul, et apr=E8s aussi :
print "avant ref($refhash)\n"; # ref()
MonPackage::monSousProgram( $refhash );
print "avant ref($refhash)\n"; # ref()
Ce qui fait que : @maListeDeClefs =3D keys %{$refhash}; # est vide.
$nb =3D @maListeDeClefs;
package Export; sub readCsvExportIntoHash { my $refHligne = shift;
print "===< ref($refHligne)n"; open( FILE_IN, $ARGV[0] ) or die ("Pb ouverture n");
while (defined($_ = <FILE_IN>)) { chomp $_; [ ici le hash est nourri de la lecture du fichier et les traces de la lecture du hash montrent qu'il a bien pris ses valeurs valeurs ] } }
La question : le hash est bien modifié dans le programme appelé, mais il ne l'est pas dans le programme appelant. D'ailleurs, pourquoi ref(($refhash) est-il nul dans le programme appelant après avoir déclaré la référence ( voir précédent me ssage) sur un hachage :
$refhash = {}; print "avant ref($refhash)n"; # réponse : "ref() " Ca ne devrait pas être nul - non ? -- merci
On Nov 17, 2:25 am, (Marc Espie) wrote:
In article .com>,
fr6 wrote: >Aussi simple - où est l'erreur ?
Donne ton vrai code, ou un sous-ensemble suffisant pour exhiber le proble me.
package Export;
sub readCsvExportIntoHash {
my $refHligne = shift;
print "===< ref($refHligne)n";
open( FILE_IN, $ARGV[0] ) or die ("Pb ouverture n");
while (defined($_ = <FILE_IN>)) {
chomp $_;
[ ici le hash est nourri de la lecture du fichier et les traces de
la lecture du hash montrent qu'il a bien pris ses valeurs valeurs ]
}
}
La question : le hash est bien modifié dans le programme appelé, mais
il ne l'est pas dans le programme appelant.
D'ailleurs, pourquoi ref(($refhash) est-il nul dans le programme
appelant après avoir déclaré la référence ( voir précédent me ssage)
sur un hachage :
$refhash = {};
print "avant ref($refhash)n"; # réponse : "ref() "
Ca ne devrait pas être nul - non ?
--
merci
On Nov 17, 2:25 am, es...@lain.home (Marc Espie) wrote:
In article <b330233c-c62c-4ebc-bc81-07b2dcada...@r36g2000prf.googlegroups .com>,
fr6 <francisder...@mac.com> wrote:
>Aussi simple - où est l'erreur ?
Donne ton vrai code, ou un sous-ensemble suffisant pour exhiber le proble me.
package Export; sub readCsvExportIntoHash { my $refHligne = shift;
print "===< ref($refHligne)n"; open( FILE_IN, $ARGV[0] ) or die ("Pb ouverture n");
while (defined($_ = <FILE_IN>)) { chomp $_; [ ici le hash est nourri de la lecture du fichier et les traces de la lecture du hash montrent qu'il a bien pris ses valeurs valeurs ] } }
La question : le hash est bien modifié dans le programme appelé, mais il ne l'est pas dans le programme appelant. D'ailleurs, pourquoi ref(($refhash) est-il nul dans le programme appelant après avoir déclaré la référence ( voir précédent me ssage) sur un hachage :
$refhash = {}; print "avant ref($refhash)n"; # réponse : "ref() " Ca ne devrait pas être nul - non ? -- merci
On Nov 17, 2:25 am, (Marc Espie) wrote:
In article .com>,
fr6 wrote: >Aussi simple - où est l'erreur ?
Donne ton vrai code, ou un sous-ensemble suffisant pour exhiber le proble me.
Avec juste une description, pas la moindre idee.
Paul Gaborit
À (at) Sun, 16 Nov 2008 14:14:20 -0800 (PST), fr6 écrivait (wrote):
Je ne comprends pas ce qui ne marche pas ici - qui doit être simple.
Dans le programme pl d'appel je décalre une référence à un hachage : $refhash = {};
J'appel le sous programme avec cette référence en paramètre :
MonPackage::monSousProgram( $refhash );
Je vérifie que dans monSolusProgramme ref($refhash) est bien un hachage : HASH(0x229b9c) - non nul.
Mais avant cet appel, dans le programme appelant, j'ai ref($refhash) qui est nul, et après aussi :
Le bout de code suivant fonctionne très bien :
---------------------------------------- sub mysub { my $hl = shift; $hl->{a} = 3; }
my $h = {}; mysub($h); print $h->{a}, "n"; ----------------------------------------
Donc votre description ne correspond pas à votre problème. Donnez-nous un extrait code (simplifié) qui montre votre problème...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Sun, 16 Nov 2008 14:14:20 -0800 (PST),
fr6 <francisderive@mac.com> écrivait (wrote):
Je ne comprends pas ce qui ne marche pas ici - qui doit être simple.
Dans le programme pl d'appel je décalre une référence à un hachage :
$refhash = {};
J'appel le sous programme avec cette référence en paramètre :
MonPackage::monSousProgram( $refhash );
Je vérifie que dans monSolusProgramme ref($refhash) est bien un
hachage : HASH(0x229b9c) - non nul.
Mais avant cet appel, dans le programme appelant, j'ai ref($refhash)
qui est nul, et après aussi :
Le bout de code suivant fonctionne très bien :
----------------------------------------
sub mysub {
my $hl = shift;
$hl->{a} = 3;
}
my $h = {};
mysub($h);
print $h->{a}, "n";
----------------------------------------
Donc votre description ne correspond pas à votre problème. Donnez-nous
un extrait code (simplifié) qui montre votre problème...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>