Citation :
J'ai le resultat (sur 2 lignes d'ailleurs, pourquoi ?)
|
Quand tu fais ça:
Code :
print "Enter a number :"; $num1 = <>;
|
$num1 va contenir ce que tu as tapé, c'est à dire une chaine de caractères terminée par un retour de ligne.
Donc @pool contient deux chaines terminées par \n et quand tu fais:
Code :
print "Sum of @pool is $result";
|
quand @pool est évalué, son contenu est imprimé, soit les deux chaines de caractères avec les \n, d'ou les sauts de ligne obtenus.
Pourquoi ton addition marche quand même? parce que quand tu fais ça:
le + force l'évaluation de $item (qui est donc une chaine de caractères terminée par \n) dans un contexte numérique, et donc c'est l'évaluation de $item comme nombre qui est ajouté à $sum.
Si tu fais:
Code :
print "Enter a number :"; $num1 = 0 + <>;
|
Ca va forcer l'évaluation numérique de l'input et le stocker comme valeur numérique dans $num1 (et tu verras la différence au print de @pool: tu auras juste les nombres sans saut de ligne)
Autre point:
Il vaudrait mieux écrire:
@pool = ($num1,$num2);
pool va contenir une copie des valeurs de $num1 et $num2 évaluées au moment de l'assignation.
Enfin, je ne sais pas si ce que tu essayes de faire ressemble à ceci, mais ça devrait te donner des idées:
Code :
sub add_mul { $sum = 0; $mul = 1; foreach $item (@_) { $sum += $item; $mul *= $item; } } @result = add_mul(@pool); print "Sum of @pool is $result[0] and Mul is $result[1]";
|
Après, la procédure peut s'écrire de manière un peu plus condensée, mais c'est juste une question de style:
Code :
sub add_mul { my ($sum, $mul) = (0, 1); foreach (@_) { ($sum, $mul) = ($sum + $_, $mul * $_); } }
|
A+,
Message édité par gilou le 25-11-2009 à 16:57:07
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --