bir dosyaya komut çıktısı yaz ve dizgeyle eşleş


0

Perl için yeniyim. Sistem önyükleme zamanı bilgilerini windows komutundan yazdırmak için aşağıdaki komut dosyasını yazıyorum systeminfo. Burada bazı problemler var. Çıktıyı bu şekilde alıyorum.

Biri bana yardım edebilir mi

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

Çıktı:

Died at perl_sysboottime.pl line 8.

Satır 8 nedir?
Putnik

iki kez $ cmd açıyorsunuz. Perl açısından bir hata yok ama kodunuzu korumak zorunda kalacak herkes için oldukça kafa karıştırıcı
Putnik

Yanıtlar:


0

Parantez mi unuttun?

open my $cmd, '<:encoding(UTF-8)', $file or die; 

için

open (my $cmd, '<:encoding(UTF-8)', $file) or die; 

Parantez zorunlu değildir
Toto

0

Systeminfo komutunun verdiği her satırı açmaya çalışıyorsunuz. Dosya değiller, bilgi satırları.

Komut dosyanızın gözden geçirilmiş bir sürümü olabilir:

use strict;
use warnings;
my @cmdout = `systeminfo`;
foreach my $line (@cmdout) {
    print $line if $line =~ /System Boot/i;
}

veya verileri saklamak istiyorsanız $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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.