Si empleas GNU/Linux para trabajar, saber Perl y Python suele ser interesante ya que te permite crear pequeños script que interaccione muy directamente con el sistema. Además de todo eso, Perl es un gran lenguaje de programación, permite realizar numerosas tareas en pocas líneas y por lo general es simple de manejar y comprender.
Hoy tuve la necesidad, en un script perl de procesamiento de correos, de ejecutar comandos externos y tocó realizar una búsqueda en Google de cómo realizar lo que me interesaba. Yo necesitaba ejecutar un comando y obtener la salida del mismo en una variable. Finalmente lo realicé con backticks, pero aproveché para recordar otros métodos de ejecución de comandos que voy a continuación a compartir con vosotros.
- systemSe emplea para ejecutar comandos del sistema en los que no interesa capturar la salida del mismo.system acepta el paso de un comando con argumentos directamente, así como el paso de variables como argumentos a la hora de ejecución. Aunque no captura la salida del comando, sí permite saber si éste se ejecutó correctamente o no (variable $?) y en caso de fallo, saber el error devuelto (variable $!).
... system($command, @args); if ($?) { print "command failed: $!\n"; } ...
- execEjecuta el comando especificado, pero a diferencia de system, exec nunca devuelve al programa de llamada, excepto que la llamada falle por que el comando no exista.Al igual que system, los argumentos pueden ser un array.
... if (($pid = fork()) == 0) { exec($command, @args); } waitpid($pid, 0); ...
- openSe emplea si quieres que tu script importe o exporte datos externos mediante un pipe. Existen dos formas de ejecutarlo,
- open("command | ")
Para capturar datos desde la ejecución de un comando. - open(" | command")
Para enviar datos a un programa externo desde Perl.
... open (DST, '-|', $pdftk, @pdf, 'cat', 'output', $final); close DST; ...
- open("command | ")
- backticksHay que emplear este método en caso de que deseemos capturar a una variable la ejecución de un comando del sistema. En método de funcionamiento es similar al mismo empleo en bash. Al igual en systema, $? almacena el estado de salida del comando.
... $random = `< /dev/urandom tr -dc A-Za-z0-9_.,@ | head -c12; echo n`; ...