• Publicidad

return dentro de un if

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

return dentro de un if

Notapor PipoRide » 2012-02-15 14:17 @636

Tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub getValue{
  2.         my($self, $caseDetail, $plans, $testCaseFlow) = @_;
  3.  
  4.         my @plans = @$plans;
  5.         if($caseDetail->data)
  6.         {
  7.                 my $plan;
  8.                 my $error;
  9.                 try{
  10.                         foreach $plan (@plans){
  11.                                 my ($plan_value, $data_value) = split ("-",$plan);
  12.                                 if($caseDetail->data->name eq $data_value){
  13.                                         return $plan_value;
  14.                                 }
  15.                         }
  16.                         return $caseDetail->data->getValueByDataAndPlan($plan)->value;
  17.                 }
  18.                 catch{
  19.                         my $e = @_;
  20.                         $error = $e;
  21.                 };
  22.                 if($error){
  23.                         return $caseDetail->data->value;
  24.                 }
  25.         }
  26. }
  27.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Todo funciona perfecto menos cuando se cumple la condición del if()
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if($caseDetail->data->name eq $data_value){
  2.        return $plan_value;
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La función es llamada así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $value = $self->getValue($caseDetail, \@plans, $testCaseFlow);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Para los otros dos return() me entregan un valor, pero no así para el return() del if().

Me retorna un valor vacío...
¿Estoy haciendo algo mal?
¿Es posible hacer eso?

He puesto un print() dentro del if() y me muestra el valor de $plan_value, y todo Ok.
No sé en qué me estoy equivocando.


De antemano, gracias.
PipoRide
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2012-01-27 08:07 @380

Publicidad

Re: return dentro de un if

Notapor explorer » 2012-02-15 17:22 @765

Yo no veo nada raro...

¿Y si pones un print() justo después de la llamada de la función, para saber el valor de $value?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: return dentro de un if

Notapor PipoRide » 2012-02-16 07:04 @336

Me sale el valor en blanco.
Es demasiado raro :?
PipoRide
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2012-01-27 08:07 @380

Re: return dentro de un if

Notapor explorer » 2012-02-16 07:17 @345

La función tiene 4 salidas: las líneas 13, 16, 23 y el propio final de la función, en caso de if($caseDetail->data) falle. Este último es el que sí es seguro que devuelve un valor vacío.

Delante de cada return(), yo pondría un print(), del estilo "sale por return 1, con valor ...". Para estar completamente seguro.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: return dentro de un if

Notapor PipoRide » 2012-02-16 07:28 @352

Hummmm Lo acabo de hacer, y claro, retorna el valor del final.
Como si el return() del if() no estuviese funcionando.
Por eso me retorna un valor vacío...
¿A qué se debe esto?
Porque con el print() que hago dentro del if() me aseguro de que sí entra.
PipoRide
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2012-01-27 08:07 @380

Re: return dentro de un if

Notapor PipoRide » 2012-02-16 07:33 @356

Bueno, la solución fue poner un "Flag" dentro del If().

Luego, fuera del try/catch pregunté si la bandera había sido cambiada y si era así, que retorne el valor.

Funciona perfecto.

Lo raro es el porqué no puedo retornar dentro del try/catch

Bueno, ¡muchas gracias, explorer!

No lo habría podido solucionar sin tu ayuda.
PipoRide
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2012-01-27 08:07 @380

Re: return dentro de un if

Notapor explorer » 2012-02-16 07:47 @366

El problema quizás esté en la elección del módulo que implementa el try/catch.

Si has usado Try::Tiny, un return que esté dentro de try/catch, devolverá el control a la subrutina en donde esté ese try/catch, no a la línea que llamó a la subrutina.

En cambio, con TryCatch, un return() dentro de try/catch sí que devolverá el control a la línea que llamó a la subrutina.

Si estás usando Try::Tiny, deberás ver la sección CAVEATS, de su página de manual. Allí viene una forma de cómo hacerlo: capturando el valor que devuelve try{}. O también se puede solucionar como lo has hecho tu: con una bandera.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: return dentro de un if

Notapor PipoRide » 2012-02-16 08:13 @384

¡Como siempre dando una mayor cantidad de soluciones!

Así es estoy usando Try::Tiny.
Le echaré un vistazo a CAVEATS y también probaré con TryCatch.

Muchas gracias.
PipoRide
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2012-01-27 08:07 @380


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 14 invitados