#!/usr/bin/perl
$command="lscpu | grep -i Architecture";
#$arch = system($command);
@SplitArch = split(/:/, system($command));
print @SplitArch[1];
私が得る結果は次のとおりです。
Architecture: x86_64
表示されるのは次のことだけだと思っていました。
x86_64
#!/usr/bin/perl
$command="lscpu | grep -i Architecture";
#$arch = system($command);
@SplitArch = split(/:/, system($command));
print @SplitArch[1];
私が得る結果は次のとおりです。
Architecture: x86_64
表示されるのは次のことだけだと思っていました。
x86_64
これはあなたが思っていることをしません。関数はコマンドを実行し、system
その終了ステータスを返します。だからあなたの場合、これは:
system($command)
印刷Architecture: x86_64
するので、これ:
@SplitArch = split(/:/, system($command));
印刷Architecture: x86_64
してに設定@SplitArch
し(0)
ます。
print @SplitArch[1]
@SplitArch
要素が1つしかないため、何も出力されません。(ちなみに、あなたはおそらくでは$SplitArch[1]
なく書くつもり@SplitArch[1]
でしたが、それはここにもそこにもありません。)
の出力をキャプチャすることを意図しているように見えるので、または代わりに次$command
を使用します。`...`
qx/.../
@SplitArch = split(/:/, `$command`);
コマンドの出力を取得する場合は、次のqx{}
演算子を使用する必要があります。
my @SplitArch = split /:/ qx{$command};
また、配列インデックス#1の値を$
出力するには、スカラー値を期待するとおりにSigilを使用する必要があります。
print $SplitArch[1], "\n";
Systemの戻り値は、出力ではなく、コマンドの終了値であると思います。
あなたはおそらくするべきです:
$output = `$command`;
@SplitArch = split(/:/, $output);
お役に立てれば。
すでに説明 system
があります—あなたが思っていることを返しません—私はただ代替の解決策を提供しています。
open(my $LSCPU, '-|', 'lscpu') or die $!;
while (<$LSCPU>) {
chomp;
my ($key, $val) = split(/:\s*/, $_, 2);
if ($key eq 'Architecture') {
print "$val\n";
last;
}
}
close($LSCPU);
利点: