OVH Cloud OVH Cloud

substitution à la volée

7 réponses
Avatar
Etienne Valquez
bonjour,
j'ai un besoin de faire une substitution à la volée sans variable
intermédiaire.
dans l'idée mais ça ne marche pas, je veux changer le , séparateur en .
et faire une multiplcation par 100.00 donc j'ai fait ceci mais ça ne
marche pas.
comment faire ?

$orig="1234,24";
$lod = ($orig =~ s/,/./)*100.00;

printf "%s %s\n", $orig, $lod;

7 réponses

Avatar
jl_morel
Dans l'article <46ee9215$0$17571$,
a dit...
j'ai un besoin de faire une substitution à la volée sans variable
intermédiaire.
dans l'idée mais ça ne marche pas, je veux changer le , séparateur en .
et faire une multiplcation par 100.00 donc j'ai fait ceci mais ça ne
marche pas.
comment faire ?

$orig="1234,24";
$lod = ($orig =~ s/,/./)*100.00;

printf "%s %sn", $orig, $lod;


Je propose :

$lod = (($orig =~ s/,/./)?100:100) * $orig;

HTH

--
J-L.M.
http://www.bribes.org/perl

Avatar
Etienne Valquez
Dans l'article <46ee9215$0$17571$,
a dit...
j'ai un besoin de faire une substitution à la volée sans variable
intermédiaire.
dans l'idée mais ça ne marche pas, je veux changer le , séparateur en .
et faire une multiplcation par 100.00 donc j'ai fait ceci mais ça ne
marche pas.
comment faire ?

$orig="1234,24";
$lod = ($orig =~ s/,/./)*100.00;

printf "%s %sn", $orig, $lod;


Je propose :

$lod = (($orig =~ s/,/./)?100:100) * $orig;

HTH



parfait :-)
merci beaucoup


Avatar
Jogo
$orig="1234,24";
$lod = ($orig =~ s/,/./)*100.00;
printf "%s %sn", $orig, $lod;


Je ne comprend pas pourquoi vous ne pouvez pas faire :

$orig =~ s/,/./ ;
$lod = $orig * 100 ;

Mais je vous propose :

$lod = ($orig =~ s/,/./ , $orig) * 100 ;

Si le but est de conserver l'$orig original :

$lod = (($lod = $orig) =~ s/,/./ , $lod) * 100 ;

--
tout téléspectateur pauvre a bien plus de raisons qu'il ne lui en faut
pour croire que l'argent procure quelque chose de tellement ressemblant
au bonheur que seuls des spécialistes peuvent voir la différence.
- Edouardo Galeano - Le Grand Soir.info -

Avatar
Nicolas George
Etienne Valquez wrote in message
<46ee9215$0$17571$:
j'ai un besoin de faire une substitution à la volée sans variable
intermédiaire.


Pourquoi cette exigence de ne pas avoir de variable intermédiaire ?

Avatar
Paul Gaborit
À (at) 17 Sep 2007 16:42:07 GMT,
(Jean-Louis MOREL) écrivait (wrote):
Dans l'article <46ee9215$0$17571$,
a dit...
j'ai un besoin de faire une substitution à la volée sans variable
intermédiaire.
dans l'idée mais ça ne marche pas, je veux changer le , séparateur en .
et faire une multiplcation par 100.00 donc j'ai fait ceci mais ça ne
marche pas.
comment faire ?

$orig="1234,24";
$lod = ($orig =~ s/,/./)*100.00;

printf "%s %sn", $orig, $lod;


Je propose :

$lod = (($orig =~ s/,/./)?100:100) * $orig;


Même si ça marche avec les versions actuelles, je suis quasiment sûr
que Perl ne garantit pas l'ordre d'évaluation de votre expression.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
Paul Gaborit
À (at) Mon, 17 Sep 2007 19:12:11 +0200,
Jogo écrivait (wrote):
$orig="1234,24";
$lod = ($orig =~ s/,/./)*100.00;
printf "%s %sn", $orig, $lod;


Je ne comprend pas pourquoi vous ne pouvez pas faire :

$orig =~ s/,/./ ;
$lod = $orig * 100 ;


C'est à mon avis la "bonne" solution (propre et compréhensible).

Mais je vous propose :

$lod = ($orig =~ s/,/./ , $orig) * 100 ;

Si le but est de conserver l'$orig original :

$lod = (($lod = $orig) =~ s/,/./ , $lod) * 100 ;


Là, ça marche même si ce n'est vraiment pas beau.

On peut aussi faire avec le moteur de regexp :

($lod = $orig) =~ s/(d+)(,(d+))?/$2?"$1.$3"*100:$1*100/e;

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
Paul Gaborit
À (at) 17 Sep 2007 16:42:07 GMT,
(Jean-Louis MOREL) écrivait (wrote):
Je propose :

$lod = (($orig =~ s/,/./)?100:100) * $orig;


Pour garantir l'ordre d'évaluation :

$lod = ($orig =~ s/,/./) ? 100*$orig : 100*$orig;

Mais dans ce cas, on retrouve l'autre solution :

$lod = ($orig =~ s/,/./, 100*$orig);

Qu'on pourrait aussi écrire :

$lod = ($orig =~ y/,/./, 100*$orig);

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>