首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是Perl的新手,对hashes和bless感到困惑。

是Perl的新手,对hashes和bless感到困惑。
EN

Stack Overflow用户
提问于 2016-06-04 05:20:18
回答 1查看 177关注 0票数 2

我使用以下命令从Perl库中检索一些数据

代码语言:javascript
复制
print Dumper($each_host->hardware->cpuInfo)."\n\n";

我得到的回报是。

代码语言:javascript
复制
$VAR1 = bless( {
             'hz' => '2199999664',
             'numCpuCores' => '20',
             'numCpuPackages' => '2',
             'numCpuThreads' => '40'
           }, 'HostCpuInfo' );

我不知道该如何处理这件事,也不知道什么是福气。我的目标只是访问调用Perl VMware SDK返回的散列的原始值。

它来自于VMware perl SDK。

代码语言:javascript
复制
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时

代码语言:javascript
复制
HostCpuInfo  {
Parents       DynamicData
public methods (1) : get_property_list
private methods (0)
internals: {
    hz               2199999664,
    numCpuCores      20,
    numCpuPackages   2,
    numCpuThreads    40
}
}

所以我把代码改成:

代码语言:javascript
复制
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);

然后它会返回

代码语言:javascript
复制
$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
        ];

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-06-04 18:54:50

您需要阅读的文档是。您需要单击"Downloads“下的Documentation按钮才能访问该网页,或者您也可以将信息下载到您自己的系统上供本地使用

如果您转到该页面并在contents部分查找"Writing Perl SDK for vSphere Scripts",您将看到一个无用的标记为"Working with“的页面。这将通向这个页面

与您的问题相关的重要信息如下

要从视图访问简单属性,请在视图对象上调用该属性的访问器。访问器与属性本身具有相同的名称,如下所示:

$view_name->property_name

看起来您的$each_host是一个HostSystem类型的对象,它有一个类型为HostHardwareInfo的属性hardware,而它又有一个类型为HostCpuInfo的属性cpuInfo。最后一个是您在问题开始时使用Dumper转储的对象

如果您阅读了HostCpuInfo对象的文档,您将看到它们有四个属性:hznumCpuCoresnumCpuPackagesnumCpuThreads

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

代码语言:javascript
复制
my $cpuinfo = $each_host->hardware->cpuInfo;

for my $property ( qw/ hz numCpuCores  numCpuPackages  numCpuThreads / ) {
    printf "%s = %d\n", $property, $cpuinfo->$property;
}

或者像这样单独地

代码语言:javascript
复制
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。看起来所有的事实都在某处

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37623591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档