我如何得到这些有福的变量?

时间:2017-02-14 22:49:22

标签: perl

我试图使用一个模糊的文档库,似乎正在回归祝福的事情

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.

2 个答案:

答案 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将是数组中的第一个项目(您的示例仅显示一个项目,但在通用情况下,您的数组引用可能包含多个项目。)