mettre des variables a zero

Le
kurtz le pirate
bonjour,

est-il possible d'initialiser d'un seul coup plusieurs variables du
style :
my($a, $b, $c, $d)=0;

en fait c'est pour une fonction qui accepte un nombre variable
d'argument. quand je fais my($a, $b, $c, $d)=@-; je voudrais que les
parameetres non passés soit à zéro et pas a undef.


merci
--
klp
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jerome Quelin
Le #155843
kurtz le pirate wrote:
est-il possible d'initialiser d'un seul coup plusieurs variables du
style :
my($a, $b, $c, $d)=0;


my ($a, $b, $c, $d) = (0) x 4;


en fait c'est pour une fonction qui accepte un nombre variable
d'argument. quand je fais my($a, $b, $c, $d)=@-; je voudrais que les
parameetres non passés soit à zéro et pas a undef.


en l'occurence, il faut boucler sur tes éléments avec un truc du genre :
my ($a, $b, $c, $d) = map { defined($_) ? $_ : 0 } @_;


jérôme
--


Paul Gaborit
Le #155842
À (at) Sun, 02 Dec 2007 18:16:53 +0100,
Jerome Quelin
kurtz le pirate wrote:
est-il possible d'initialiser d'un seul coup plusieurs variables du
style :
my($a, $b, $c, $d)=0;


my ($a, $b, $c, $d) = (0) x 4;


en fait c'est pour une fonction qui accepte un nombre variable
d'argument. quand je fais my($a, $b, $c, $d)=@-; je voudrais que les
parameetres non passés soit à zéro et pas a undef.


en l'occurence, il faut boucler sur tes éléments avec un truc du genre :
my ($a, $b, $c, $d) = map { defined($_) ? $_ : 0 } @_;


Si @_ ne contient pas 4 éléments les éléments manquants ne seront pas
créés à zéro...

On peut mixer les deux méthodes :

my ($a, $b, $c, $d) = ((map { defined $_ ? $_ : 0 } @_), (0) x 4);

--
Paul Gaborit - Perl en français -

kurtz le pirate
Le #155753
In article Paul Gaborit
Si @_ ne contient pas 4 éléments les éléments manquants ne seront pas
créés à zéro...

On peut mixer les deux méthodes :

my ($a, $b, $c, $d) = ((map { defined $_ ? $_ : 0 } @_), (0) x 4);



merci :))

--
klp

Jean-Baptiste Mazon
Le #155647
Paul Gaborit
À (at) Sun, 02 Dec 2007 18:16:53 +0100,
Jerome Quelin
kurtz le pirate wrote:
est-il possible d'initialiser d'un seul coup plusieurs variables du
style :
my($a, $b, $c, $d)=0;


my ($a, $b, $c, $d) = (0) x 4;

en l'occurence, il faut boucler sur tes éléments avec un truc du genre :
my ($a, $b, $c, $d) = map { defined($_) ? $_ : 0 } @_;


Si @_ ne contient pas 4 éléments les éléments manquants ne seront pas
créés à zéro...

On peut mixer les deux méthodes :

my ($a, $b, $c, $d) = ((map { defined $_ ? $_ : 0 } @_), (0) x 4);


Ou, d'une autre manière:

my ($a, $b, $c, $d) = (@_, (0) x 4);



Paul Gaborit
Le #155646
À (at) Mon, 10 Dec 2007 16:26:06 +0100,
Jean-Baptiste Mazon
Paul Gaborit
On peut mixer les deux méthodes :

my ($a, $b, $c, $d) = ((map { defined $_ ? $_ : 0 } @_), (0) x 4);


Ou, d'une autre manière:

my ($a, $b, $c, $d) = (@_, (0) x 4);


Sauf que dans ce cas, une valeur 'undef' passée en argument ne sera
pas remplacée par la valeur zéro...

--
Paul Gaborit - Perl en français -

Jean-Baptiste Mazon
Le #155645
Paul Gaborit
À (at) Mon, 10 Dec 2007 16:26:06 +0100,
Jean-Baptiste Mazon
my ($a, $b, $c, $d) = (@_, (0) x 4);


Sauf que dans ce cas, une valeur 'undef' passée en argument ne sera
pas remplacée par la valeur zéro...


Tout à fait.

De mon point de vue, c'est voulu: j'ai profité du fait que la demande
initiale était vague sur ce point.

Mais j'aurais dû le signaler. Mea culpa. Merci de l'avoir fait.


Paul Gaborit
Le #155644
À (at) Mon, 10 Dec 2007 17:45:06 +0100,
Jean-Baptiste Mazon
De mon point de vue, c'est voulu: j'ai profité du fait que la demande
initiale était vague sur ce point.


En fait, je viens de relire la demande initiale et je me demande si ce
n'est pas moi qui déforme... L'objectif était de récupérer des zéros à
la place des paramètres *non* *passés*. Il n'était pas demandé que les
paramètres passés avec comme valeur 'undef' soit mis à zéro. Donc
votre solution convient peut-être mieux finalement.

--
Paul Gaborit - Perl en français -
kurtz_le_pirate
Le #155643
Paul Gaborit wrote:
À (at) Mon, 10 Dec 2007 17:45:06 +0100,
Jean-Baptiste Mazon
De mon point de vue, c'est voulu: j'ai profité du fait que la demande
initiale était vague sur ce point.


En fait, je viens de relire la demande initiale et je me demande si ce
n'est pas moi qui déforme... L'objectif était de récupérer des zéros à
la place des paramètres *non* *passés*. Il n'était pas demandé que les
paramètres passés avec comme valeur 'undef' soit mis à zéro. Donc
votre solution convient peut-être mieux finalement.


oui, la demande initiale était bien de mettre à zéro les paramètres *non
passés*.

si j'appele toto(1,2,3) et que toto attends 4 paramètres, le quatrième
sera mis à zéro.

le cas ou le/les parametre(s) sont passé à 'undef' n'est pas possible.



--
klp
"bug : probleme d'interface entre la chaise et le clavier"


Paul Gaborit
Le #155642
À (at) Tue, 11 Dec 2007 16:11:42 +0100,
"kurtz_le_pirate"
oui, la demande initiale était bien de mettre à zéro les paramètres
*non passés*.

si j'appele toto(1,2,3) et que toto attends 4 paramètres, le quatrième
sera mis à zéro.


Ok. Là toutes les deux dernières solutions proposées fonctionnent.

le cas ou le/les parametre(s) sont passé à 'undef' n'est pas possible.


C'est possible si on appelle :

toto(1, undef, 3, 4);

;-)

--
Paul Gaborit - Perl en français -
Paul Gaborit
Le #155641
À (at) Tue, 11 Dec 2007 16:54:44 +0100,
Paul Gaborit
À (at) Tue, 11 Dec 2007 16:11:42 +0100,
"kurtz_le_pirate"
oui, la demande initiale était bien de mettre à zéro les paramètres
*non passés*.

si j'appele toto(1,2,3) et que toto attends 4 paramètres, le quatrième
sera mis à zéro.


Ok. Là toutes les deux dernières solutions proposées fonctionnent.


Ce qui donne en français correct :

« Ok. Là les deux dernières solutions proposées fonctionnent. »

;-)

--
Paul Gaborit - Perl en français -

Publicité
Poster une réponse
Anonyme