这个程序有没有更好的实现方法?

这个程序有没有更好的实现方法?

root@lynch /cgi/ajax\>mpstat
Linux 2.6.18 (lynch)    2008年07月16日

12时18分00秒  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12时18分00秒   all      14.49     0.00      1.06    0.49       0.05     0.02     0.00     83.89    287.70

要把每一个带%的项的值取出来,比如说要取出%idle的值83.89
最开始用数组的元素来取, $array[9];
但有的系统mpstat的输出会少一项,数组的元素就变了,
要取出%idle的值就要用$array[8]了。

现在用哈希表来取数据,将有CPU的行作为key,将有all的行作为value,
下面是代码

#!/usr/local/bin/perl
use strict;
use warnings;

my $mpstat = '/usr/bin/mpstat';
my ($hash, @keys, @values);

open(PIPE, "$mpstat |") or die $!;
   while ( <PIPE> ) {
      chomp($_);
      if ( /CPU/ ) { @keys   = split(/\s+/, $_) }
      if ( /all/ ) { @values = split(/\s+/, $_) }
   }
close(PIPE) or die $!;

my $i = 0;

foreach ( @keys ) {
   $hash->{ $keys[$i] } = $values[$i];
   ++$i;
}

print "CPU IDLE: $hash->{'%idle'}%\n";

不知道有没有更好的方法,还请各位赐教!

伪散列
@hash(@keys) = (@values);


QUOTE:
原帖由 cobrawgl 于 2008-7-16 14:54 发表
@hash(@keys) = (@values);

报语法错误
@hash[ @keys ]= (@values);
@hash{@keys}=@values;


QUOTE:
原帖由 cai120120 于 2008-7-16 15:47 发表
@hash[ @keys ]= (@values);



一看就是错的

数组的元素索引能用非数字吗?



QUOTE:
原帖由 eadgbeguitar 于 2008-7-16 16:11 发表
@hash{@keys}=@values;



有这种数据结构吗?


QUOTE:
原帖由 lin_wang 于 2008-7-16 16:12 发表





一看就是错的

数组的元素索引能用非数字吗?

好象数组的元素可是不是数字吧?


QUOTE:
原帖由 q1208c 于 2008-7-16 16:23 发表

好象数组的元素可是不是数字吧?


可是不是???