escreve uma saída de comando para um arquivo e combina uma string

0

Eu sou novo no perl. Estou escrevendo abaixo do script para imprimir as informações de tempo de inicialização do sistema pelo comando systeminfo do Windows. Há algum problema aqui. Estou recebendo a saída assim.

Alguém poderia me ajudar

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

Saída:

Died at perl_sysboottime.pl line 8.
    
por user3834663 12.08.2017 / 17:30

2 respostas

0

Esqueceu os parênteses?

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

para

open (my $cmd, '<:encoding(UTF-8)', $file) or die; 
    
por 12.08.2017 / 22:30
0

Você está tentando abrir cada linha dada pelo comando systeminfo. Eles não são arquivos, são linhas de informação.

Uma versão revisitada do seu script pode ser:

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

ou, se você quiser manter os dados em $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;
}
    
por 22.08.2017 / 13:48

Tags