我试图使用一个模糊的文档库,似乎正在回归祝福的事情
bless
即使在阅读了一些解释它的尝试之后也没有意义,所以我只是问一个简单的问题,我如何得到这些成员变量?
错误消息似乎与Data::Dumper
输出有冲突,但由于$vm_ds
需要得到祝福,我尝试添加"祝福($ vm_ds,' ManagedObjectReference');" in and just got
不是blib / lib / Class / MethodMaker / scalar.pm中的HASH引用(自动分为blib / lib / auto / Class / MethodMaker / scalar / scal0000.al)第252行。
我的麻烦。
my $vm_ds = $vm_view->datastore;
print "--datastore--\n";
print Dumper($vm_ds);
print "vm_ds1: ", $vm_ds->value, "\n";
exit 0;
$VAR1 = [
bless( {
'value' => 'filer01-cvo-2.fs.peak.org:/vol/vmfs01',
'type' => 'Datastore'
}, 'ManagedObjectReference' )
];
Can't call method "value" on unblessed reference at ./getvms line 93.
答案 0 :(得分:4)
$vm_ds
是对一个有福的哈希数组的引用,因此$vm_ds->[0]
被祝福为ManagedObjectReference
。您可以使用value
提取$vm_ds->[0]{value}
字段,但直接访问对象属性是非常错误的,并且相当于访问私有属性
bless
是Perl的面向对象机制,数据项被祝福的类指定哪个Perl包包含类的方法和数据
某处有一个.pm
文件,其中包含package ManagedObjectReference
和一些子程序,这些子程序是该类的方法。这些提供了类的官方接口,如果你很幸运,那么有一个value
方法,它是value
属性的访问方法。尝试拨打$vm_ds->[0]->value()
并查看是否有效,否则您需要阅读ManagedObjectReference
课程的文档
答案 1 :(得分:2)
$vm_ds
是对数组的引用(因此Dumper输出中的[ ... ]
),其中一个项是类ManagedObjectReference
的实例(这就是祝福的意思:说出一些东西是一些类的实例)
因此,您需要$vm_ds->[0]->value()
代替$vm_ds->value()
。 0将是数组中的第一个项目(您的示例仅显示一个项目,但在通用情况下,您的数组引用可能包含多个项目。)