
Я новичок в 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.
решение1
Вы забыли скобки?
open my $cmd, '<:encoding(UTF-8)', $file or die;
к
open (my $cmd, '<:encoding(UTF-8)', $file) or die;
решение2
Вы пытаетесь открыть каждую строку, заданную командой 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;
}