操作系统:AIX
Shell:KSH
根据this question上接受的答案,我创建了一个多层数组。只是,我在尝试打印数组内容时遇到错误。
错误:
Argument "content of $pvid" isn't numeric in array element at...
脚本:
#!/usr/bin/perl
use warnings;
use strict;
use Term::ANSIColor;
my @arrpvid = ();
print colored( sprintf("%-10s %9s %8s %8s %8s", 'PVID', 'AIX', 'VIO', 'VTD', 'VHOST'), 'green' ), "\n";
foreach my $pvid (`lspv | awk '{print \$2'}`) {
foreach my $hdaix (`lspv | awk '{print \$1'}`) {
chomp $pvid;
chomp $hdaix;
push @{ $arrpvid[$pvid] }, $hdaix;
}
}
print $arrpvid[0][0];
一些解释:
基本上我想打印5个不同阵列的5个变量。代码仅针对2个数组编写。
$ pvid的内容:
00088da343b00d9b
00088da38100f93c
$ hdaix的内容:
hdisk0
hdisk1
答案 0 :(得分:2)
看起来你想要使用哈希而不是数组,使你的内部push
push @{ $arrpvid{$pvid} }, $hdaix;
注意$pvid
周围的方括号到花括号的变化。这告诉编译器你想要%arrpvid
而不是@arrpvid
,所以一定要调整你的my
声明。
最后要打印%arrpvid
的内容,请使用
foreach my $pvid (sort { hex $a <=> hex $b } keys %arrpvid) {
local $" = "]["; # handy trick due to mjd
print "$pvid: [@{$arrpvid{$pvid}}]\n";
}
Data::Dumper模块是快速简便的输出工具。
use Data::Dumper;
$Data::Dumper::Indent = $Data::Dumper::Terse = 1;
print Dumper \%arrpvid;
您可能想要在$pvid
中使用hex
获取与每个十六进制字符串对应的数值,如
push @{ $arrpvid[hex $pvid] }, ...
但考虑到问题中的大量示例值,@arrpvid
会变得非常庞大。请使用哈希来创建sparse array。
确保$pvid
的所有值都具有相同的填充。否则,类似值可能不会适当地散列在一起。如果需要规范化,请使用
$pvid = sprintf "%016x", hex $pvid;
答案 1 :(得分:1)
问题在于:
push @{ $arrpvid[$pvid] }, $hdaix;
$pvid
应为0或5之类的数值,而不是00088da343b00d9b