Как мне сделать хэш с выводом kstat -p с помощью Perl?

StackOverflow https://stackoverflow.com/questions/1795956

  •  22-09-2019
  •  | 
  •  

Вопрос

Я работаю над некоторыми вещами, где мне нужно получить некоторую информацию, используя 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.

Это было полезно?

Решение

При использовании ссылок создание иерархической структуры данных немного сложнее;Единственная интересная часть связана с тем, что мы хотим по-другому обрабатывать финальный уровень (присваивая значение вместо создания нового уровня хеширования).

# 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.
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top