• Publicidad

Conflicto con el operador eq

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

Conflicto con el operador eq

Notapor primitivo » 2013-06-28 17:53 @787

Hola amigos, yo de nuevo.
Tengo el siguiente problemilla:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if (($lectura[1] eq "P") or ($lectura[1] eq "PRIVMSG"))
  2. {
  3.                              if ($lectura[0])
  4.                              {
  5.                                              print "Recibiendo $lectura[0]\n";
  6.                                              $user = $NUMERICOS{$lectura[0]};
  7.                                              @comando = split(/\:/,$lectura[3]);
  8.                                              &queries();
  9.                              }
  10. }
  11.  
  12. sub queries
  13. {
  14.     $co = uc($comando[1]);
  15.     if ($lectura[2] eq $n_preo)
  16.     {
  17.             print "He recibido privado dirigido a -> $lectura[2]\n\n";
  18.     } else {
  19.            print "No he recibido nada, que pasara? -> $lectura[2] $!\n\n";
  20.     }
  21. }
  22.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Resulta que $! me devuelve que la condición if es ilegal. Lo que deseo es comparar si $lectura[2] es igual a $n_preo.

$lectura[2] tiene valor 1AD;
$n_preo tiene valor 1AD;

Tengo intención de quitar el número y pasar por lc() las variables... ¿qué me aconsejan uds.?
primitivo
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2013-03-22 23:05 @004

Publicidad

Re: Conflicto con el operador eq

Notapor explorer » 2013-06-28 18:58 @832

Si la palabra clave if fuera ilegal, el programa no funcionaría... pero pertenece a Perl.

Otra cosa es que haya un fallo de sintaxis, pero yo no veo nada raro.

¿Puedes copiar aquí el mensaje de error?

Ten en cuenta que $! se actualiza cuando ocurre un fallo a nivel de intérprete o a nivel de sistema operativo (más información en perlvar). Si hubiera un error de sintaxis, Perl lo hubiese dicho en el momento de arrancar el programa.
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: Conflicto con el operador eq

Notapor primitivo » 2013-06-28 19:03 @835

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2. La salida de $! es 'Illegal seek'
  3.  
  4.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
primitivo
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2013-03-22 23:05 @004

Re: Conflicto con el operador eq

Notapor explorer » 2013-06-28 19:17 @845

'seek' se refiere a una llamada a una primitiva del sistema del mismo nombre, que sirve para posicionarse en un determinado byte dentro de un archivo.

Eso no tiene nada que ver con lo del if() ni con lo que tienes ahí escrito, así que el error viene de antes.

Ten en cuenta que el valor de $! solo tiene sentido si es comprobado inmediatamente después de la operación "peligrosa". Un poco más tarde, no es seguro que lo que contenga sea significativo.

Por otra parte, lo que quieres es comparar $lectura[2] con $n_preo. El caso es que la comparación es correcta: 'eq' sirve para comparar cadenas de caracteres.

¿Seguro que los dos contienen '1AD;' y no te funciona? Prueba a sacar el contenido de las variables así, con corchetes:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "\$lectura[2] => [$lectura[2]]\n";
  2. print "\$n_preo     => [$n_preo]\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Presta atención a que salga algún espacio en blanco, o un avance de línea, como por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$n_preo    => [1AD;
]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
el corchete se ha desplazado a la línea siguiente, y así nos damos cuenta de que $n_preo contiene algo que no veíamos.
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: Conflicto con el operador eq

Notapor primitivo » 2013-06-28 19:54 @871

Gracias explorer.

¡Solucionado!

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $BT = \%BOTS;
  2. my $s_preo = "PRIMITIVO";
  3. my $numerico = int(rand()*10);
  4. $n_preo = "${numerico}AA";
  5. my $bytes = $_;
  6.  
  7. @lectura = split(" ",$bytes);
  8.  
  9. $BOTS{lc($s_preo)} = $n_preo; #Declaro a $n_preo dentro del hash como valor.
  10.  
  11. if ($BOTS{"primitivo"} eq $lectura[0]) { print "¡Resuelto!\n\n"; }
  12. else { print "O no? :((\n\n"; }
  13.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
primitivo
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2013-03-22 23:05 @004


Volver a Básico

¿Quién está conectado?

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

cron