コマンド出力をファイルに書き込んで文字列を一致させる

コマンド出力をファイルに書き込んで文字列を一致させる

私は 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;
}

関連情報