Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

perl objet, variable globale

2 réponses
Avatar
Newsgroups
Bonjour,

d=E9sol=E9 pour le sujet de ce messsage, j'ai d=E9j=E0 mis 20 minutes =E0 l=
e
r=E9diger, car je sais pas comment m'expliquer.. je comprends rien !

je dois =EAtre mal r=E9veill=E9 ce matin... voici mon soucis, en esp=E9rant=
que
vous y comprendrez quelque chose et que vous pourrez m'aider... :

j'ai ces 2 bouts de code qui ne font pas ce que je veux:
<code>
for my $link ( $c->getAllLinks() ) {
my $s =3D new source;=09
$s->addIncomeLink($c->getUrl());
}
</code>

<code:classe source>
.../...

sub addIncomeLink {
my ($class, $sr) =3D @_;
my $fs =3D $source->{"ils"}->[0]->{"f"};
$source->{"ils"}->[0]->{"f"}->[@$fs] =3D $sr;
}
</code:classe source>

en fait, pour chaque =E9l=E9ments de mon tableau ($c->getAllLinks()), il me
cr=E9=E9 une "source". Mais ensuite, quand il fait "addIncomeLink", alors
mon hash $source semble =EAtre global.

Exemple :
pour le premier element de $c->getAllLinks(), le script passe sur
addIncomeLink et $source de mon $s est alors =E9gal =E0 la variable que je
lui ait pass=E9 dans l'appel de addIncomeLink, soit : $c->getUrl() ; la
variable $fs =E9tant vide.

par contre, pour le deuxi=E8me element de $c->getAllLinks(), $fs est =E9gal
=E0 1 ! et ca c'est pas normal selon moi, car je pensais que le "my" dans
la ligne "my $s =3D new source" aurais permis d'avoir des instances de
classe diff=E9rentes...
donc =E0 ce 2=E8me passage, mon hash $source contient d=E9j=E0 le $c->getUr=
l()
du premier passage =3D> et ca j'en veut pas moi...

Voil=E0, vous avez des id=E9es pour mon soucis ? o=F9 ets mon erreur...

2 réponses

Avatar
Loïc Restoux
Le 22 jui, à 08:38, Newsgroups papotait :
j'ai ces 2 bouts de code qui ne font pas ce que je veux:
<code>
for my $link ( $c->getAllLinks() ) {
my $s = new source;
$s->addIncomeLink($c->getUrl());
}
</code>


Vous avez copié l'intégralité de votre code ? Parce que, là, je ne vois
pas l'utilité de la variable $link...

<code:classe source>
.../...

sub addIncomeLink {
my ($class, $sr) = @_;
my $fs = $source->{"ils"}->[0]->{"f"};
$source->{"ils"}->[0]->{"f"}->[@$fs] = $sr;
}
</code:classe source>


D'où sort la variable $source ? On ne voit pas sa définition. Si vous
avez copié l'intégralité de votre fonction addIncomeLink(), c'est que
$source est définie en dehors... donc il y a des chances qu'elle soit
globale.

Si c'est l'instance de classe que vous voulez utiliser dans cette
fonction, c'est $class qui vous intéresse (le premier argument de la
méthode d'une classe est une référence del'instance courante). D'ailleurs,
personnellement, je l'appelle plutôt $self, ça me semble plus causant.

Mes deux centimes...

--
No fortunes found

Avatar
Newsgroups

Vous avez copié l'intégralité de votre code ? Parce que, là, je n e vois
pas l'utilité de la variable $link...


non, je n'ai pas tout copié, et je m'en sers plus loin de $link


D'où sort la variable $source ? On ne voit pas sa définition. Si vous
avez copié l'intégralité de votre fonction addIncomeLink(), c'est q ue
$source est définie en dehors... donc il y a des chances qu'elle soit
globale.

Si c'est l'instance de classe que vous voulez utiliser dans cette
fonction, c'est $class qui vous intéresse (le premier argument de la
méthode d'une classe est une référence del'instance courante).


Bon, c'étais bien un problème de définition de la variable, j'ai chan gé
juste une petite ligne et ca fonctionne !


D'ailleurs, personnellement, je l'appelle plutôt $self, ça me semble plus causant.
Oh, merci, j'en prends note, j'ai déjà commencé à changer mes scrip ts,

ca me parait mieux !