加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:24:17 所属栏目:大数据 来源:网络整理
导读:如何找到我在Perl中处理的对象类型?我尝试使用perl -d进入调试器,但我不知道该怎么做。同样,我想要一个方法来轻松查看哪些方法可用于每个对象,如何做到这一点? 解决方法 告诉你有什么类型的对象的标准方法是 ref 或 Scalar::Util ::祝福。如果你知道对
如何找到我在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,因为该类包含对象可用的行为。

祝你好运。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读