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

mettre des variables a zero

10 réponses
Avatar
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

10 réponses

Avatar
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 } @_;


jérôme
--


Avatar
Paul Gaborit
À (at) Sun, 02 Dec 2007 18:16:53 +0100,
Jerome Quelin écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
kurtz le pirate
In article ,
Paul Gaborit wrote:

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

Avatar
Jean-Baptiste Mazon
Paul Gaborit writes:

À (at) Sun, 02 Dec 2007 18:16:53 +0100,
Jerome Quelin écrivait (wrote):
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);



Avatar
Paul Gaborit
À (at) Mon, 10 Dec 2007 16:26:06 +0100,
Jean-Baptiste Mazon écrivait (wrote):
Paul Gaborit writes:
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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
Jean-Baptiste Mazon
Paul Gaborit writes:
À (at) Mon, 10 Dec 2007 16:26:06 +0100,
Jean-Baptiste Mazon écrivait (wrote):
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.


Avatar
Paul Gaborit
À (at) Mon, 10 Dec 2007 17:45:06 +0100,
Jean-Baptiste Mazon écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
kurtz_le_pirate
Paul Gaborit wrote:
À (at) Mon, 10 Dec 2007 17:45:06 +0100,
Jean-Baptiste Mazon écrivait (wrote):
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"


Avatar
Paul Gaborit
À (at) Tue, 11 Dec 2007 16:11:42 +0100,
"kurtz_le_pirate" écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Paul Gaborit
À (at) Tue, 11 Dec 2007 16:54:44 +0100,
Paul Gaborit écrivait (wrote):
À (at) Tue, 11 Dec 2007 16:11:42 +0100,
"kurtz_le_pirate" écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>