escribir una salida de comando en un archivo y hacer coincidir una cadena


0

Soy nuevo en Perl. Estoy escribiendo el siguiente script para imprimir la información del tiempo de arranque del sistema desde el comando de Windows systeminfo. Mira algún problema aquí. Estoy obteniendo la salida de esta manera.

Alguien podría ayudarme

use strict;
use warnings;
my $filename = 'sysinfo.txt';
my @cmdout = `systeminfo`;
open(my $cmd, '>', $filename) or die "Could not open file '$filename' $!";
print $cmd @cmdout;
foreach my $file (@cmdout) {
    open my $cmd, '<:encoding(UTF-8)', $file or die;
    while (my $line = <$cmd>) {
        if ($line =~ m/.*System Boot.*/i) {
            print $line;
        }
    }
}

Salida:

Died at perl_sysboottime.pl line 8.

¿Qué es la línea 8?
Putnik

estás abriendo $ cmd dos veces. No hay ningún error desde el punto de vista de Perl, pero es bastante confuso para cualquiera que tenga que mantener su código
Putnik

Respuestas:


0

¿Has olvidado los corchetes?

open my $cmd, '<:encoding(UTF-8)', $file or die; 

a

open (my $cmd, '<:encoding(UTF-8)', $file) or die; 

Los paréntesis no son obligatorios
Toto

0

Está intentando abrir cada línea dada por el comando systeminfo. No son archivos, son líneas de información.

Una versión revisada de su script podría ser:

use strict;
use warnings;
my @cmdout = `systeminfo`;
foreach my $line (@cmdout) {
    print $line if $line =~ /System Boot/i;
}

o, si desea mantener los datos en $filename

use strict;
use warnings;
my $filename = 'sysinfo.txt';
my @cmdout = `systeminfo`;
open(my $cmd, '>', $filename) or die "Could not open file '$filename' $!";
print $cmd @cmdout;
foreach my $line (@cmdout) {
    print $cmd $line if $line =~ /System Boot/i;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.