我正在使用
从Perl库中检索一些数据print Dumper($each_host->hardware->cpuInfo)."\n\n";
我得到的是。
$VAR1 = bless( {
'hz' => '2199999664',
'numCpuCores' => '20',
'numCpuPackages' => '2',
'numCpuThreads' => '40'
}, 'HostCpuInfo' );
我不知道如何处理那个或者什么是祝福。我的目标是访问调用Perl VMware SDK
返回的哈希的原始值它来自VMware perl SDK。
my $host_view = Vim::find_entity_views(view_type=>'HostSystem',properties=>['name','config','hardware'],begin_entity=>$each_dc);
foreach my $each_host(@$host_view){
print "\n\t".$each_host->name."\n";
print Dumper($each_host->hardware->cpuInfo)."\n\n";
当我做Data :: Printer
时HostCpuInfo {
Parents DynamicData
public methods (1) : get_property_list
private methods (0)
internals: {
hz 2199999664,
numCpuCores 20,
numCpuPackages 2,
numCpuThreads 40
}
}
所以我将代码更改为:
print Dumper($each_host->hardware->cpuInfo->numCpuPackages)."\n\n";
my $array1 = $each_host->hardware->cpuInfo->get_property_list;
print 'return'.$array1."\n\n";
print Dumper($each_host->hardware->cpuInfo->get_property_list);
然后返回
$VAR1 = '2';
return4
$VAR1 = [
'dynamicType',
undef,
undef,
0
];
$VAR2 = [
'dynamicProperty',
'DynamicProperty',
1,
0
];
$VAR3 = [
'numCpuPackages',
undef,
undef,
1
];
$VAR4 = [
'numCpuCores',
undef,
undef,
1
];
$VAR5 = [
'numCpuThreads',
undef,
undef,
1
];
$VAR6 = [
'hz',
undef,
undef,
1
];
由于
答案 0 :(得分:0)
您需要阅读的文档是vSphere Perl SDK for vSphere 6.0。您需要点击"下载"下的Documentation
按钮。进入网页,或者您可以在自己的系统上下载供本地使用的信息
如果您转到该页面并查看"为Perl脚本编写vSphere SDK"的内容部分,您将看到一个无用的标记页面"使用"。这导致了这个页面
Working with View Object Property Values
与您的问题相关的重要信息是
要从视图访问简单属性,请在视图对象上调用属性的访问者。访问者与属性本身具有相同的名称,如下所示:
$view_name->property_name
您的$each_host
似乎是HostSystem
类型的对象,其类型HostHardwareInfo
的属性hardware
,其属性cpuInfo
} HostCpuInfo
类型。最后一个是您在问题开头使用Dumper
转储的对象
如果您阅读HostCpuInfo
个对象的文档,则会看到它们有四个属性:hz
,numCpuCores
,numCpuPackages
和numCpuThreads
您应该能够编写这样的代码来访问所有四个值:
my $cpuinfo = $each_host->hardware->cpuInfo;
for my $property ( qw/ hz numCpuCores numCpuPackages numCpuThreads / ) {
printf "%s = %d\n", $property, $cpuinfo->$property;
}
或单独这样
printf "hz = %d\n", $cpuinfo->hz;
printf "numCpuCores = %d\n", $cpuinfo->numCpuCores;
printf "numCpuPackages = %d\n", $cpuinfo->numCpuPackages;
printf "numCpuThreads = %d\n", $cpuinfo->numCpuThreads;
请注意,这是访问对象属性的正确方式,并使用文档中的信息。它不依赖于使用Data::Dumper
或类似
我建议您花一些时间阅读文档并熟悉API。看起来事实就在某处