如何找到我对Perl的类型的对象?

前端之家收集整理的这篇文章主要介绍了如何找到我对Perl的类型的对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何找到我在Perl中处理的对象类型?我尝试使用perl -d进入调试器,但我不知道该怎么做。同样,我想要一个方法来轻松查看哪些方法可用于每个对象,如何做到这一点?

解决方法

告诉你有什么类型的对象的标准方法refScalar::Util ::祝福。如果你知道对象是祝福的,那么他们返回相同的信息。
my $class1 = blessed( $obj );
my $class2 = ref $obj;

但是ref也会返回’HASH’为无耻的哈希,而祝福拒绝玩这个游戏。

至于方法列表,对于perl对象的祝福指针样式,很容易自己编写代码。下面的代码对我来说很好。它返回映射到定义它们的包的函数名(带有给定名称的“CODE slot”的函数)。

sub class_methods { 
    use Class::ISA;
    my $obj = shift;
    return unless ref( $obj );
    my %meth_names;
    foreach my $anc ( Class::ISA::self_and_super_path( ref $obj ),'UNIVERSAL' ) {
        my $stash = \%{"$anc\::"};
        my @funcs 
            = grep { m/^[_\p{Alpha}]/                # begins with _ or alpha
                   && !exists $meth_names{$_}        # no clobbering
                   &&  defined *{$stash->{$_}}{CODE} # has a filled CODE slot
                   } keys %$stash
            ;
        # assign to the "hash slice",keyed by all the entries in @funcs
        # the value of $anc repeated as many times as elements in @funcs.
        @meth_names{@funcs} = ( $anc ) x @funcs;
    }
    return %meth_names;
}

>这将适用于合理复杂的对象,但如果拥有包包含大量生成代码,知道哪些包的生成器卡住了代码指针不是有帮助的。这将意味着更多的找到什么包生成代码
>在这种情况下,你可能得到代码运行你的代码包括Data::Dumper和设置$ Data :: Dumper :: Deparse为1,像这样:(local $ Data :: Dumper :: Deparse = 1;)和然后转储代码指针,像这样:say Dumper($ code_ref);
>它不适用于尚未由任何AUTOLOAD方法创建的有效方法。如果你看到那些在列表中,对象可能做更多,但它的所有它,你不知道。
>包含“基类”UNIVERSAL,因为该类包含对象可用的行为。

祝你好运。

猜你在找的Perl相关文章