Como faço para fazer um hash com a saída de kstat -p usando Perl?
Pergunta
Estou trabalhando para que algumas coisas onde eu preciso obter algumas informações usando kstat -p
. Então, estou pensando em criar uma variável de hash com toda a saída de kstat -p
.
Sample output from kstat -p
cpu_stat:0:cpu_stat0:user 18804249
Para acessar valores
@{$kstat->{cpu_stat}{0}{cpu_stat0}}{qw(user)};
Eu também olhei para o CPAN para qualquer módulo disponível e encontrei Sun::Solaris::Kstat
Mas isso não está disponível com minha versão solar. Por favor, sugira código para criar uma variável de hash com valores de saída em kstat -p
.
Solução
Com referências, a criação de uma estrutura de dados hierárquicos é apenas um pouco complicada; A única parte interessante vem do fato de queremos lidar com o nível final de maneira diferente (atribuindo um valor em vez de criar um novo nível de hash).
# 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.
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow