Página 1 de 1

Ejecutar un programa de Perl dentro de otro

NotaPublicado: 2011-04-04 09:09 @422
por Alfumao
Hola a todos,

¿Cómo he de hacer para ejecutar un programa de Perl dentro de otro? ¿Usando "require"?

¿Cómo le paso al programa los parámetros, si lo quiero usar como si fuera una subrutina dentro de otro programa?

Imaginemos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #[Bloque de programa]
  2. &subrutina1;# Habría de incluir el resultado en una variable tipo $sub1=&subrutina1;
  3.  
  4. require"programa2.pl"; # ¿cómo paso los resultados del retorno de la subrutina anterior
  5.                        # para que sean usado por el programa2?
  6.  
  7. print "resultados2" # ¿cómo imprimo los resultados obtenidos del uso de programa2.pl?
  8.                     # ¿en una variable $resultados2=require"programa2.pl"?
  9.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


No sé si me habéis entendido. Supongo que es algo básico, pero es que no sé cómo enfocarlo...

Un saludo

Re: Ejecutar un programa de Perl dentro de otro

NotaPublicado: 2011-04-04 10:09 @464
por explorer
Una cosa es incorporar el código de otro fichero Perl, en el nuestro (por lo que, a partir de ese momento, las variables y funciones de ese fichero formarán parte de nuestro espacio de nombres, y podremos ejecutar y acceder a ellos como si fuera el nuestro); y otra cosa es ejecutar un programa Perl externo (en ese caso, le pasamos unos argumentos, lo ejecutamos, y nos da una salida).

Para el primer caso, hay que usar: do(), use o require.

para el segundo caso, system(), exec, qx() y ``.

Cada uno tiene sus ventajas e inconvenientes.

Si solo vas a ejecutarlo una sola vez, el programa externo, entonces te vale la segunda solución.

Si el programa externo tiene variables y funciones (unas cuantas), y puede que las ejecutes o no, en distintos momentos, entonces es mejor usar la primera.

Re: Ejecutar un programa de Perl dentro de otro

NotaPublicado: 2011-04-05 05:36 @275
por pvaldes
Exacto, una vez que pones use o require ya tienes disponibles todas las variables del programa al que se invoca desde el script principal, SALVO que estén definidas como my() dentro de algún bucle y traten de llamarse luego desde fuera del bucle o que sean redefinidas en el script principal, si dos variables tienen el mismo nombre en ambos scripts puedes tener problemas y no obtener lo que esperas.

De todos modos parece que estás haciendo el proceso inverso.

En tu ejemplo deberías cargar el programa 1 (invocarlo) desde el programa 2, no al revés.