• Publicidad

Mútiples variables con if

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

Mútiples variables con if

Notapor netsoul » 2015-12-21 15:00 @666

El siguiente código está mal. Mi intención es hacer un comparación de 3 (o más) variables e imprimir cuando todas son iguales, pero quiero hacerlo de forma más corta sin if anidadas, y si es posible sin módulos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @a = 1;
  2. my @b = 1;
  3. my @c = 1;
  4.  
  5. if (@a == @b == @c){
  6.  #print si todos son iguales
  7.  #no print si uno es diferente
  8. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Podría existir una solución elegante para esto?

¡Gracias!
With Perl
Imagination is more important than knowledge. Albert Einstein.
netsoul
Perlero nuevo
Perlero nuevo
 
Mensajes: 150
Registrado: 2008-05-04 01:11 @091

Publicidad

Re: Mútiples variables con if

Notapor MARKO » 2015-12-22 00:09 @047

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @a = 1;
  2. my @b = 1;
  3. my @c = 1;
  4.  
  5. if (@a == @b and @b == @c){
  6.  #print si todos son iguales
  7. }
  8. else{
  9.  #no print
  10. }
  11.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Re: Mútiples variables con if

Notapor explorer » 2015-12-22 04:20 @222

El código de MARKO contiene un error muy frecuente: al poner array en contexto numérico, los array se convierten al número de elementos que contienen.

Entonces, lo que hace el código de MARKO es comparar el número de elementos, pero no los propios elementos (se ve fácil que no funciona si inicializamos los array con otro valor, por ejemplo, '2'.

Y el operador '==' es numérico (¿qué ocurre cuando los elementos son de otro tipo?) y no actúa sobre todos los elementos de los array.

No queda más remedio que comparar elemento por elemento de los array.

Una forma cómoda de resolverlo es con el módulo Array::Utils:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Array::Utils qw(array_diff);
  2.  
  3. my @a = 1 .. 4;
  4. my @b = 2 .. 8;
  5.  
  6. if ( !array_diff(@a, @b) ) {
  7.         # hacer algo cuando son diferentes
  8. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Como netsoul no quiere usar módulos... pues tendrá que escribir más líneas... o usar el par de líneas que usa internamente Array::Utils ;)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado