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