Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl新手,对哈希和bless感到困惑_Perl_Sdk_Vmware - Fatal编程技术网

Perl新手,对哈希和bless感到困惑

Perl新手,对哈希和bless感到困惑,perl,sdk,vmware,Perl,Sdk,Vmware,我正在使用 print Dumper($each_host->hardware->cpuInfo)."\n\n"; 我得到的回报是 $VAR1 = bless( { 'hz' => '2199999664', 'numCpuCores' => '20', 'numCpuPackages' => '2', 'numCpuThreads' => '40'

我正在使用

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

谢谢

您需要阅读的文档是。您需要单击“下载”下的
文档
按钮进入网页,或者您可以在自己的系统上下载信息供本地使用

如果您转到该页面并在内容部分中查找“为Perl脚本编写vSphere SDK”,您将看到一个标签为“使用”的页面。这就引出了这一页

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

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

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

如果阅读
HostCpuInfo
对象的文档,您将看到它们有四个属性:
hz
numpucores
numpupackages
numputhreads

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

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

这意味着你有一个类为
HostCpuInfo的对象
。您应该使用该类的方法来访问这些值,尽管您可以作为散列访问引用的对象?请显示您的程序更新了它,但是我不确定如何访问numCpuThreads或哈希表中的任何其他值,而Data::Dumper很适合查看底层数据结构,更适合对象。它将为您提供方法列表、有关值和继承的信息。从CPAN安装并使用它。或者尝试调用
$each\u host->hardware->cupInfo->numputhreads
。这听起来是个合理的猜测。@BostonMacOSX您不必猜测对象提供了什么方法:您使用的每个类都应该有文档。编写良好的Perl模块实际上在源代码中直接包含POD文档;通过在命令行上运行
perldoc Foo::Bar
,可以查看模块Foo::Bar的文档。希望VMware SDK有合适的文档。