next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: La función exec Sup: Gestión de Procesos Ant: Gestión de Procesos Err: Si hallas una errata ...

La función system

La forma habitual de lanzar un proceso en Perl es a través el comando system:

system 'ls -l $PATH'
En el ejemplo hemos usado comillas simples para impedir que Perl interpole la variable $PATH. Quien debe interpolarla es la shell que ejecutará el comando. También es posible escribir:
system "ls -l \$PATH"

cuando el comando usado como argumento no implica redirección, canales (pipes), etc. el comando es ejecutado directamente por Perl. En caso contrario Perl llama a la shell para que ejecute el comando. En este segundo caso el comando se convierte en un proceso nieto del programa Perl.

Si se llama al comando system con mas de un argumento Perl no llamará a la shell, cualquiera que sea la forma del comando. En ese caso, el primer argumento se interpreta como el nombre del comando y los siguientes como los argumentos para el mismo.

El valor devuelto por system es el devuelto por el proceso hijo.

$status = system('command');
Retorna -1 si el programa no se pudo arrancar. Con perldoc perlvar puede obtener información sobre la variable $?, la cuál contiene el estatus retornado por el programa. Un ejemplo de uso, comprobando el estatus es:
 if ($? == -1) {
     print "No se pudo ejecutar: $!\n";
 }
 elsif ($? & 127) {
     printf "El proceso hijo a muerto con señal %d, %s coredump\n",
         ($? & 127),  ($? & 128) ? 'con' : 'sin';
 }
 else {
     printf "Proceso hijo termina con estatus %d\n", $? >> 8;
 }

Se puede usar una segunda sintáxis con system, separando los argumentos mediante comas:

$status = system('command', 'arg1','arg2');

En este caso, es Perl quien ejecuta el comando y ningún metacarácter shell (redirecciones, pipes, etc.) será interpretado. Por ejemplo:

@args = ("command", "arg1", "arg2");
system(@args) == 0 or die "system @args failed: $?"


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: La función exec Sup: Gestión de Procesos Ant: Gestión de Procesos Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21