perl system pipe backticks

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



system pipe (4)

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.

Perl admite tres formas (que yo sepa) de ejecutar programas 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?)

Obtener el estado de salida del programa 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

`...`


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).


  • 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 programa ejecutado a una variable, y el sistema lo envía al STDOUT de su programa principal.