
Ich bin neu bei Perl. Ich schreibe das folgende Skript, um die Informationen zur Systemstartzeit aus dem Windows-Befehl auszudrucken systeminfo
. Hier scheint es ein Problem zu geben. Ich erhalte die folgende Ausgabe.
Könnte mir jemand helfen
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;
}
}
}
Ausgabe:
Died at perl_sysboottime.pl line 8.
Antwort1
Klammern vergessen?
open my $cmd, '<:encoding(UTF-8)', $file or die;
Zu
open (my $cmd, '<:encoding(UTF-8)', $file) or die;
Antwort2
Sie versuchen, jede Zeile zu öffnen, die der Befehl systeminfo liefert. Es handelt sich dabei nicht um Dateien, sondern um Zeilen mit Informationen.
Eine überarbeitete Version Ihres Skripts könnte wie folgt aussehen:
use strict;
use warnings;
my @cmdout = `systeminfo`;
foreach my $line (@cmdout) {
print $line if $line =~ /System Boot/i;
}
oder, wenn Sie Daten behalten möchten in$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;
}