Perl的新功能和哈希的困惑和祝福

时间:2016-06-03 21:20:18

标签: perl sdk vmware

我正在使用

从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
        ];

由于

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个对象的文档,则会看到它们有四个属性:hznumCpuCoresnumCpuPackagesnumCpuThreads

您应该能够编写这样的代码来访问所有四个值:

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。看起来事实就在某处