• Publicidad

¿Existe elemento en un array?

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

¿Existe elemento en un array?

Notapor felmoltor » 2007-05-13 17:37 @776

¡Hola!
Aquí estoy de nuevo.
Se que la pregunta es un poco simple pero me gustaría saber si existe alguna función que indique si existe un elemento concreto dentro de un array o si para saber estoy tengo que realizar un bucle que explore todo el array.

Otro problema que tengo es que intento ejecutar esto:


Código: Seleccionar todo
my $valido=`echo $& | ispell -l -d spanish`;


para comprobar si $& está en el diccionario de español, pero al ejecutar me muestra un fallo como este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
sh: Syntax error: "|" unexpected
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¡Gracias a todos!
felmoltor
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2007-03-08 17:04 @753

Publicidad

Notapor creating021 » 2007-05-13 19:01 @834

my $valido=`echo $& | ispell -l -d spanish`;


El problema es que Shell ve "echo $&" como "echo '$' &" y está viforcando el proceso por eso no puede usar pipes.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2007-05-13 20:42 @904

Para comprobar la existencia de un elemento de un hash o array se usa exists():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    print "Exists\n"    if exists $hash{$key};
    print "Defined\n"   if defined $hash{$key};
    print "True\n"      if $hash{$key};

    print "Exists\n"    if exists $array[$index];
    print "Defined\n"   if defined $array[$index];
    print "True\n"      if $array[$index];
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

En cuanto al fallo, Perl está interpolando el valor de la variable especial $&, así que no es lo que te ha dicho creating021. Más bien parece que se está confundiendo con el valor del pipe, quizás porque $& estuviera vacía.

Sería interesante saber el valor de $& en ese momento.

Pero para intentar solventar el problema prueba a entrecomillar la variable para que el texto sea pasado a echo y no se confunda con el pipe:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $valido=`echo "$&" | ispell -l -d spanish`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
A mí, al menos, sí que me funciona así.
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

Notapor felmoltor » 2007-05-14 07:46 @365

Gracias a los 2. Ya me va bien todo. :wink:
felmoltor
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2007-03-08 17:04 @753

Notapor creating021 » 2007-05-14 15:35 @691

¡Hola! Ahora me toca preguntar a mi, ja, ja.

Bien, hace rato había un problema (por ahí) en pasar parametros (desde shell script) a wget puesto que la URL contenia "&" y en efecto al ejeutar decía (como normalmente lo dice) el PID del hijo.
Al final la solución fue muy simple, poner la URL entre comillas dobles (wget "URL") y funciono.

La pregunta no es si en este caso ( caso de felmotor ) es correcto o no lo hecho y dicho (porque eso ya está dicho), la pregunta es que si al usar "backticks" la ejecución es directa a el entorno (Bash, Csh et cetera) cosa que desconosco y me interesa saber.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2007-05-14 17:09 @756

La documentación (en perlop, sección Regexp Quote-Like Operators, donde habla de las backticks) dice que:
A string which is (possibly) interpolated and then executed as a system command with /bin/sh or its equivalent. Shell wildcards, pipes, and redirections will be honored. The collected standard output of the command is returned;...
Cuando dice que 'posiblemente' sea interpolado es que hay una ocasión en la que se puede ordenar que NO interpole la expresión: cuando se usa la forma qx'EXPRESION'; (usar las comillas simples como delimitadores del operador qx).

En cuanto a la pregunta, sí, después de ser interpolada es ejecutada con el comando del sistema (dependerá de cada sistema, claro).
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

Notapor creating021 » 2007-05-14 17:30 @770

Wow, sería interesante ver que pasa si uso Psh y no Bash... quie sabe como perl lo hace.

Cada día veo que perl 5 (el interprete) es muy complejo pero ya quiero ver perl 6... :)
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Básico

¿Quién está conectado?

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