записать вывод команды в файл и сопоставить строку

297
user3834663

Я новичок в 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. 
0
Что такое строка 8? Putnik 6 лет назад 0
вы открываете $ cmd дважды. Там нет ошибок с точки зрения Perl, но довольно запутанно для тех, кто должен будет поддерживать ваш код Putnik 6 лет назад 0

2 ответа на вопрос

0
Putnik

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

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

в

open (my $cmd, '<:encoding(UTF-8)', $file) or die; 
Скобки не обязательны Toto 5 лет назад 0
0
Toto

Вы пытаетесь открыть каждую строку, заданную командой 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; }