2016-06-03 2 views
2

Я извлечение некоторые данные из библиотеки Perl, используяНовое в Perl и Смущает хэшей и благослови

print Dumper($each_host->hardware->cpuInfo)."\n\n"; 

Что я вернусь есть.

$VAR1 = bless({ 
      'hz' => '2199999664', 
      'numCpuCores' => '20', 
      'numCpuPackages' => '2', 
      'numCpuThreads' => '40' 
      }, 'HostCpuInfo'); 

Я понятия не имею, как бороться с этим или тем, что есть. Моя цель - просто получить доступ к исходным значениям хэша, которые были возвращены вызовом Perl VMware SDK.

Он исходит из SDK VMware perl.

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

Когда я сделал данных :: Принтер

HostCpuInfo { 
Parents  DynamicData 
public methods (1) : get_property_list 
private methods (0) 
internals: { 
    hz    2199999664, 
    numCpuCores  20, 
    numCpuPackages 2, 
    numCpuThreads 40 
} 
} 

SO Я изменил вверх код:

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

Благодарности

+3

Это значит, что у вас есть объект класса 'HostCpuInfo'. Вы должны использовать методы этого класса для доступа к значениям, хотя вы можете получить доступ к указанному объекту как к хешу. – ikegami

+1

Что такое библиотека Perl, которую вы используете? Пожалуйста, покажите свою программу – Borodin

+0

. Однако я не уверен, как получить доступ к numCpuThreads или любым другим значениям в hash – BostonMacOSX

ответ

0

Документация, которую вы должны читать, - vSphere Perl SDK for vSphere 6.0. Вам нужно щелкнуть по кнопке Documentation в разделе «Загрузки», чтобы перейти на веб-страницу, или вы можете загрузить информацию для местного использования в своей собственной системе.

Если вы перейдете на эту страницу и посмотрите в разделе содержания для " Написав vSphere SDK для Perl-скриптов », вы увидите страницу, бесполезно помеченную« Работа с ». Это приводит к этой странице

Working with View Object Property Values

важной информации, имеющую отношение к вашему вопросу это

Чтобы получить доступ к простому свойству с точкой зрения, называют аксессор собственности на объекте представления. Аксессор имеет такое же имя, как и само имущество, а именно:

$view_name->property_name 

Похоже, ваш $each_host является объектом типа HostSystem, который имеет свойство hardware типа HostHardwareInfo, который, в свою очередь, имеет свойство 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. Похоже, что все там есть где-то