OVH Cloud OVH Cloud

Question sur les fonctions...

4 réponses
Avatar
romain.daumont
Salut,

J'ai ecris un bout code qui comporte une fonction. Seulement,
j'aimerai recuperer la valeur d'une variable ($balise), mais il me
retourne une erreur.

"Use of uninitialized value in concatenation (.) or string at
./essai2.pl line 51, <DATA> line 283.
La valeur de la balise = "

Voila le morceau interressant :

sub search
...
}
if($hostfound == $max)
{
$balise = 1;
return $balise;
}
}

# Structure principale
for ($j=0;$j<$#listepcldap;$j++)
{
print ldap_search($listepcldap[$j])."\n";
print "La valeur de la balise = $balise\n";
}

Si vous avez une idée?

4 réponses

Avatar
Jacques Caron
Salut,

On 18 Apr 2005 12:21:52 -0700, MaXX wrote:

J'ai ecris un bout code qui comporte une fonction. Seulement,
j'aimerai recuperer la valeur d'une variable ($balise), mais il me
retourne une erreur.


Variable globale ou locale? Elle est déclarée comment (use vars, my, our?)
et où (dans la fonction, en dehors de toute fonction)? Use strict et -w
sont utilisés, j'espère?

"Use of uninitialized value in concatenation (.) or string at
./essai2.pl line 51, <DATA> line 283.


Au choix, soit la variable n'est pas initalisée dans tous les cas, soit ce
code ne fait pas référence à la même variable (locale vs globale).

sub search
...
}
if($hostfound == $max)
{
$balise = 1;
return $balise;
}
}


Et d'une, c'est un peu bizarre, un simple return 1 aurait suffi (si
$balise est locale), et de deux, que se passe-t-il si on ne passe jamais
par ce bout de code? $balise n'est alors pas définie...

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
romain.daumont
"Jacques Caron" wrote in message news:...
Salut,

On 18 Apr 2005 12:21:52 -0700, MaXX wrote:

J'ai ecris un bout code qui comporte une fonction. Seulement,
j'aimerai recuperer la valeur d'une variable ($balise), mais il me
retourne une erreur.


Variable globale ou locale? Elle est déclarée comment (use vars, my, our?)
et où (dans la fonction, en dehors de toute fonction)? Use strict et -w
sont utilisés, j'espère?

"Use of uninitialized value in concatenation (.) or string at
./essai2.pl line 51, <DATA> line 283.


Au choix, soit la variable n'est pas initalisée dans tous les cas, soit ce
code ne fait pas référence à la même variable (locale vs globale).

sub search
...
}
if($hostfound == $max)
{
$balise = 1;
return $balise;
}
}


Et d'une, c'est un peu bizarre, un simple return 1 aurait suffi (si
$balise est locale), et de deux, que se passe-t-il si on ne passe jamais
par ce bout de code? $balise n'est alors pas définie...

Jacques.


Re,

En faite, j'ai fais une petite erreur car j'ai mis un "my $balise".
Comme je suis debutant, je ne connaissais pas la declaration avec
"our"... Je pense que ce dernier est plus approprié. Je vais donc
declarer $balise en variable globale.

thx


Avatar
Jacques Caron
On 19 Apr 2005 00:14:03 -0700, MaXX wrote:

En faite, j'ai fais une petite erreur car j'ai mis un "my $balise".
Comme je suis debutant, je ne connaissais pas la declaration avec
"our"... Je pense que ce dernier est plus approprié.


C'est rarement le cas.

Je vais donc declarer $balise en variable globale.


Un "my $balise" placé en dehors de toute fonction conviendrait très bien
pour ça. Ceci dit, les variables plus ou moins globales c'est en général
un assez mauvais style quand on utilise des fonctions.

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
piaf
salut,
effectivement, une variable globale est pas forcement approprié, deux
solutions, (1) passe la référence de ta variable a ta fonction ou (2)
affecte à la variable la valeur de retour :

(1)
sub search
my $ma_ref_balise = shift @_;
...
}
if($hostfound == $max)
{
$$ma_ref_balise = 1;
# inutile de faire un return : return $balise;
}
}
...
search ($balise);
...

(2)
sub search
my $ma_balise = shift @_
...
}
if($hostfound == $max)
{
$ma_balise = 1;
return $ma_balise;
}
}
...
$balise = search($balise);
...

++

Jacques Caron wrote:
On 19 Apr 2005 00:14:03 -0700, MaXX wrote:

En faite, j'ai fais une petite erreur car j'ai mis un "my $balise".
Comme je suis debutant, je ne connaissais pas la declaration avec
"our"... Je pense que ce dernier est plus approprié.



C'est rarement le cas.

Je vais donc declarer $balise en variable globale.



Un "my $balise" placé en dehors de toute fonction conviendrait très
bien pour ça. Ceci dit, les variables plus ou moins globales c'est en
général un assez mauvais style quand on utilise des fonctions.

Jacques.