2014-04-29 3 views
0

J'ai un code dans mon Perl projet catalyseurSi la condition ne fonctionne pas

for (my $i=1; $i<=$periodsOrg; $i++){ 
    if ($vals_repayment_org->{ending_balance} <= 0) { 
     exit; 
    } 
} 

-à-dire; si $vals_repayment_org->{ending_balance} est inférieur ou égal à 0, je dois quitter la boucle. Mais il sort de la boucle la première fois lui-même, mais la valeur est inférieure ou EqualTo 0. Le journal que j'ai est

EndBal: 249747,596957166

29 avril 05:55:43 [ eRREUR] ModPerl :: Util :: sortie: (120000) sortie a été appelé à /home/wesolnsus/public_html/application/lib/wealthe/Controller/vbo/mortgage_reduction.pm ligne 180

+1

Laquelle est la valeur de 'vals_repayment_org $ -> {ending_balance}' 'avant exit'? Vous voudrez peut-être ajouter une instruction 'print' avant' exit' pour sortir cette valeur pour être sûr. –

+0

la valeur de $ vals_repayment_org -> {ending_balance} est 249747.596957166 – Jitesh

+0

@Jitesh met 'use warnings; print $ vals_repayment_org -> {ending_balance} +0; 'avant l'instruction if. –

Répondre

3

appel exit termine le processus en cours.

Pour laisser une boucle, utilisez last. Les commandes de contrôle de boucle de Perl sont appelées last, next et redo.

On notera en outre que, dans l'extrait de code, le résultat de

if ($vals_repayment_org->{ending_balance} <= 0) { 
    exit; 
} 

est pas affectée par la variable de boucle $i, par conséquent, la condition doit être placé en dehors de la boucle.

Il est inconcevable que la condition est évaluée à vrai si $vals_repayment_org->{ending_balance} est plus que zéro - il faudrait fournir davantage de contexte pour montrer, par exemple comme

my $ending_balance = $vals_repayment_org->{ending_balance}; 
if ($ending_balance <= 0) { 
    warn "Ending Balance: $ending_balance"; 
    exit; 
} 

Pour en savoir plus: