• Publicidad

Usar variable como entrada de llamada al sistema

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

Usar variable como entrada de llamada al sistema

Notapor otorices » 2009-10-29 04:07 @213

Hola,

me gustaría saber si es posible usar el contenido de una variable como parámetro de entrada a una llamada al sistema, por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
system("nombre_funcion <" . $variable)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Es decir, en vez de recoger los datos del teclado, que los coja de la variable.

¡Muchas gracias!
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Publicidad

Re: Usar variable como entrada de

Notapor explorer » 2009-10-29 05:14 @259

Tanto

system("nombre_funcion < $variable");

como

system("cat $variable | nombre_funcion");

Lo que hacen es abrir el fichero cuyo nombre está contenido en $variable.

Lo que quieres es pasar una cadena de caracteres a la función:

system("echo \"$variable\" | nombre_funcion");

Pero si la función está bien programada, debería ser así:

system("nombre_funcion \"$variable\"");


El poner o no comillas dobles escapadas depende de cómo sea el contenido de la $variable y del shell que estés utilizando.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Usar variable como entrada de llamada al sistema

Notapor otorices » 2009-10-29 05:25 @267

Gracias, system("echo \"$variable\" | nombre_funcion"); fue la que me funcionó.
Resuelto.
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Re: Usar variable como entrada de llamada al sistema

Notapor salva » 2009-10-30 04:47 @241

Gracias, system("echo \"$variable\" | nombre_funcion"); fue la que me funcionó.


Esa es una forma muy rudimentaria de salir del paso y que se romperá con facilidad si por ejemplo $variable contiene comillas o es demasiado larga.

La forma correcta de hacer esto en Perl es con open tal y como sigue:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open my $pipe, "| nombre_funcion"
  or die "fallo al lanzar programa";
print $pipe $variable;
close $pipe;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Si lo que llamas en vez de una función de la shell (que es lo que se intuye que es por el nombre que le has dado), es un programa externo, entonces es mejor usar la variante de open de tres (o más) argumentos en vez de la de dos que puede tener problemas de seguridad. Si no recuerdo mal, en perlfunc/open lo explica.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Básico

¿Quién está conectado?

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