¿Cuáles son las diferencias entre el sistema y los backticks y las tuberías en Perl?

Perl admite tres formas (que yo sepa) de ejecutar progtwigs externos:

system :

  system PROGRAM LIST 

como en:

 system "abc"; 

backticks como en:

 `abc`; 

corriendo a través de una tubería como en:

 open ABC, "abc|"; 

Cuáles son las diferencias entre ellos? Esto es lo que sé:

  1. Puede usar patillas y tubos para obtener la salida del comando fácilmente.
  2. eso es todo (¿más en ediciones futuras?)

  • system (): ejecuta el comando y devuelve el estado de salida del comando
  • backticks: ejecuta el comando y devuelve la salida del comando
  • pipes: ejecuta el comando y le permite usarlos como un controlador

También backticks redirige el STDOUT del progtwig ejecutado a una variable, y el sistema lo envía al STDOUT de su progtwig principal.

La documentación perlipc explica las diversas formas en que puede interactuar con otros procesos desde Perl, y la documentación abierta de perlfunc explica los manejadores de archivos interconectados.

  • El sistema envía su salida a salida estándar (y error)
  • Los backticks capturan la salida estándar y la devuelven (pero no el error estándar)
  • El canal abierto le permite capturar el resultado y leerlo desde un identificador de archivo, o imprimir en un manejador de archivo y usarlo como entrada para el comando externo.

También hay módulos que manejan estos detalles con los casos de bordes multiplataforma.

sistema también está devolviendo el valor de salida de la aplicación (ERRORLEVEL en Windows). Las tuberías son un poco más complicadas de usar, ya que leerlas y cerrarlas agrega un código adicional. Finalmente, tienen una implementación diferente que tenía la intención de hacer cosas diferentes. El uso de tuberías le permite volver a comunicarse con las aplicaciones ejecutadas, mientras que los otros comandos no permiten eso (fácilmente).

Obtener el estado de salida del progtwig no está limitado a system() . Cuando llama a close(PIPE) , devuelve el estado de salida y puede obtener el último estado de salida para los 3 métodos desde $? .

Tenga en cuenta que

 readpipe('...') 

es lo mismo que

 `...` 
Intereting Posts