Hast du Klammern vergessen?
open my $cmd, '<:encoding(UTF-8)', $file or die;
zu
open (my $cmd, '<:encoding(UTF-8)', $file) or die;
Ich bin neu in Perl. Ich schreibe das folgende Skript, um die Systemstartzeitinformationen aus dem Windows-Befehl zu drucken systeminfo
. Hier sehen einige Probleme aus. Ich bekomme die Ausgabe so.
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.
Hast du Klammern vergessen?
open my $cmd, '<:encoding(UTF-8)', $file or die;
zu
open (my $cmd, '<:encoding(UTF-8)', $file) or die;
Sie versuchen, jede durch den Befehl systeminfo angegebene Zeile zu öffnen. Sie sind keine Dateien, sondern Informationszeilen.
Eine überarbeitete Version Ihres Skripts könnte Folgendes sein:
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 $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; }