如何找到我对Perl的类型的对象?
发布时间:2020-12-15 21:24:17 所属栏目:大数据 来源:网络整理
导读:如何找到我在Perl中处理的对象类型?我尝试使用perl -d进入调试器,但我不知道该怎么做。同样,我想要一个方法来轻松查看哪些方法可用于每个对象,如何做到这一点? 解决方法 告诉你有什么类型的对象的标准方法是 ref 或 Scalar::Util ::祝福。如果你知道对
如何找到我在Perl中处理的对象类型?我尝试使用perl -d进入调试器,但我不知道该怎么做。同样,我想要一个方法来轻松查看哪些方法可用于每个对象,如何做到这一点?
解决方法
告诉你有什么类型的对象的标准方法是
ref 或
Scalar::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; } >这将适用于合理复杂的对象,但如果拥有包包含大量生成的代码,知道哪些包的生成器卡住了代码指针不是有帮助的。这将意味着更多的找到什么包生成代码。 祝你好运。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |