Я новичок в Perl. Я пишу ниже сценарий для печати информации о времени загрузки системы из команды windows systeminfo . Здесь выглядят некоторые проблемы. Я получаю вывод, как это.

Может ли кто-нибудь помочь мне

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

Выход:

Died at perl_sysboottime.pl line 8.

2 ответа2

0

Вы забыли скобки?

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

в

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

Вы пытаетесь открыть каждую строку, заданную командой systeminfo. Это не файлы, а строки информации.

Пересмотренная версия вашего скрипта может быть:

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

или, если вы хотите сохранить данные в $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;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .