0

私は働いているので、を使用していくつかの情報を取得する必要があるものがいくつかありますkstat -p。だから私はのすべての出力でハッシュ変数を作成することを考えていますkstat -p

Sample output from kstat -p

cpu_stat:0:cpu_stat0:user       18804249

値にアクセスするには

@{$kstat->{cpu_stat}{0}{cpu_stat0}}{qw(user)};

また、CPANで利用可能なモジュールを調べて見つけましSun::Solaris::Kstatたが、Sunバージョンでは利用できません。の出力値を持つハッシュ変数を作成するコードを提案してくださいkstat -p

4

1 に答える 1

6

参照を使用すると、階層データ構造を作成するのが少し難しくなります。唯一の興味深い部分は、最終レベルを別の方法で処理したいという事実から来ています (新しいハッシュ レベルを作成する代わりに値を割り当てます)。

# If you don't create the ref here then assigning $target won't do
# anything useful later on.
my $kstat = {};
open my $fh, '-|', qw(kstat -p) or die "$! execing kstat";
while (<$fh>) {
  chomp;
  my ($compound_key, $value) = split " ", $_, 2;
  my @hier = split /:/, $compound_key;
  my $last_key = pop @hier; # handle this one differently.
  my $target = $kstat;
  for my $key (@hier) { # All intermediate levels
    # Drill down to the next level, creating it if we have to.
    $target = ($target->{$key} ||= {});
  }
  $target->{$last_key} = $value; # Then write the final value in place.
}
于 2009-11-25T10:31:58.093 に答える