[perl] Llamar a otros scripts
Salvador Ortiz Garcia
sog@msg.com.mx
Mon, 5 Apr 1999 22:51:13 -0500 (CDT)
On Mon, 5 Apr 1999, Adrian Galindo wrote:
>
> Hola lista, que tal la semanita? (para lo que descansaron)
>
> Hay alguna forma de verificar que dicho programa se ejecute solo si fue
> llamado por otro??? y por ende que no se pueda ejecutar por si solo.
Si, se me ocurren varias, todas de perl avanzado ;-)
Pero vamos a tu caso, para ver si entendí bien:
Tienes tres programas en perl, en uno.pl invocas a dos.pl y a tres.pl
con argumentos, en su caso, mediante algo como:
...
system("/path/dos.pl $arg1 $arg2 ...");
... # algunas instrucciones
system("/path/tres.pl $param1 $param2 ...");
...
y quieres que dos.pl y tres.pl chequen que efectivamente fueron invocados
por uno.pl, correto?
Si no, reexplicame, si si, sigue leyendo.
En uno.pl tienes que usar una sintaxis especial del 'system' al invocar a
cada subprograma, por ejemplo para ejecutar dos.pl usa:
...
system {'/usr/bin/perl'} '(){};|', '/path/dos.pl', $arg1, $arg2, ....
#Nota sin coma aquí------^
...
Y en dos.pl chechas que estás siendo invocado por uno.pl:
...
die "A $0 no se le puede invocar así, adios!\n" unless($^X eq '(){};|');
# Resto de tu programa
...
El truco consiste en hacerle creer al interprete de perl que se llama
'(){};|', un nombre imposible (entre otros) para un programa común, pues
usa puros caracteres especiales para el shell.
Adicionalmente a dos.pl le puedes quitar tranquilamente los permisos de
ejecución, pues ya no los necesita y evitas la tentación. ;-)
Ademas si a tres.pl no necesitas esperarlo en uno.pl puedes usar 'exec'
en lugar de 'system', con la misma sintaxis.
Nota: Lo anterior puede no funcionar en Windows.
Saludos
Salvador Ortiz.
--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text : cancelacion perl