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有合适的文档。