0
#!/usr/bin/perl
$command="lscpu | grep -i Architecture";
#$arch = system($command);
@SplitArch = split(/:/, system($command));
print @SplitArch[1];

私が得る結果は次のとおりです。

Architecture:          x86_64

表示されるのは次のことだけだと思っていました。

x86_64
4

4 に答える 4

4

これはあなたが思っていることをしません。関数はコマンドを実行し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`);
于 2012-08-23T19:56:16.087 に答える
1

コマンドの出力を取得する場合は、次のqx{}演算子を使用する必要があります。

my @SplitArch = split /:/ qx{$command};

また、配列インデックス#1の値を$出力するには、スカラー値を期待するとおりにSigilを使用する必要があります。

print $SplitArch[1], "\n";
于 2012-08-23T19:56:25.080 に答える
0

Systemの戻り値は、出力ではなく、コマンドの終了値であると思います。

あなたはおそらくするべきです:

$output = `$command`;
@SplitArch = split(/:/, $output);

お役に立てれば。

于 2012-08-23T19:57:53.733 に答える
0

すでに説明 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);

利点:

  • できるだけ早く終了します。
  • シェルは含まれません。
  • シェル以外の外部プログラムが1つ少なくなります。
  • 目的のラインのより正確なマッチング。
于 2012-08-23T19:58:59.113 に答える