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

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

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. Parece que hay algún problema aquí. Obtengo el resultado así.

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;
        }
    }
}

Producción:

Died at perl_sysboottime.pl line 8.

Respuesta1

¿Has olvidado los corchetes?

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

a

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

Respuesta2

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

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

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

o, si desea conservar 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;
}

información relacionada