sentencias sentencia regulares programas lenguaje expresiones ejemplos contiene contador perl system

regulares - sentencia perl



¿Cómo puedo almacenar la salida de la función del sistema de Perl en una variable? (7)

Como afirmó abubacker, puede usar los trazos inversos para capturar el resultado de un programa en una variable para su uso posterior. Sin embargo, si también necesita verificar valores de retorno excepcionales, o evitar invocar el shell, es hora de traer un módulo CPAN, IPC::System::Simple :

use IPC::System::Simple qw(capture); # Capture output into $result and throw exception on failure my $result = capture("some_command");

Este módulo se puede llamar de varias formas y le permite personalizar qué valores de retorno de error son "aceptables", si omitir el shell o no, y cómo manejar la agrupación de argumentos. También proporciona un reemplazo directo para el system() que agrega más control de errores.

Tengo un problema con la función del system . Quiero almacenar las salidas de las funciones del sistema en una variable.

Por ejemplo,

system("ls");

Aquí quiero que todos los nombres de archivo en el directorio actual se almacenen en una variable. Sé que puedo hacerlo redireccionando la salida a un archivo y leyendo de eso y almacenando eso en una variable. Pero quiero una manera eficiente que eso. Hay alguna manera .


La documentación oficial de Perl para la función del system incorporado indica:

Esto no es lo que quiere usar para capturar el resultado de un comando, para eso debe usar simplemente backticks o qx //, como se describe en " STRING " en perlop.

Existen numerosas formas de acceder fácilmente a los documentos:

  1. En la línea de comando: perldoc -f system
  2. En línea en perldoc.perl.org .
  3. Busque en la web usando google.

Si desea que cada lista de directorio esté almacenada en un elemento de matriz separado, use:

my @entries = qx(ls);


La forma más fácil usa backticks o qx() :

my $value = qx(ls); print $value;

La salida es similar a la ls .


Mi respuesta no aborda su problema. Sin embargo, si REALMENTE desea hacer una lista de directorios, no llame al sistema ls así. Use opendir() , readdir() o un ciclo while.

Por ejemplo,

while (<*>){ print $_ ."/n"; }

De hecho, si no se trata de un programa propietario de un tercero, siempre intente utilizar las funciones propias de Perl.


No, no puede almacenar los valores de la salida ls, ya que el sistema siempre ejecuta el comando como un proceso secundario, así que intente con el comando ''back'' backtick que ejecuta el comando en el proceso actual.


Una forma rápida y sencilla de hacer esto es usar qx() específicamente para su ejemplo:

my $output = qx(ls 2>&1);

La parte 2>&1 es para capturar stdout y stderr.


Usa los backticks para almacenar el resultado en una variable

$output = `ls`;