我是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;
}
}
}
输出:死于perl_sysboottime.pl第8行。
答案 0 :(得分:2)
如打印错误所示,您的脚本在第一次执行时即将死亡
open my $cmd, '<:encoding(UTF-8)', $file or die;
这意味着open
无法打开文件。
我不熟悉Windows的命令,但我会按照here给出的示例systeminfo
输出。
执行第4行后,数组@cmdout
包含systeminfo
输出的行。执行第8行时,$file
已设置为输出的第一行,或者在我的示例中设置为Host Name: COMPUTERHOPE\n
(请注意尾随换行符)。这不是文件名,因此open
失败。
看起来你正试图结合两种不同的方式来迭代文件的行,一个在另一个内部。尝试这样的事情:
foreach my $line (@cmdout) {
if ($line =~ m/.*System Boot.*/i) {
print $line;
}
}