当前位置:  开发笔记 > 编程语言 > 正文

如何确定Perl中受祝福的引用的类型?

如何解决《如何确定Perl中受祝福的引用的类型?》经验,为你挑选了2个好方法。

在Perl中,对象只是对已被保存到特定类中的任何基本Perl数据类型的引用.在未使用的引用上使用ref()函数时,会告诉您引用所指向的数据类型.但是,当您在受祝福的引用上调用ref()时,将返回引用已被祝福的包的名称.

我想知道祝福参考的实际基础类型.我怎么能确定这个?



1> Michael Carm..:

Scalar::Util::reftype()是最干净的解决方案.该Scalar::Util模块已添加到版本5.7中的Perl核心,但可用于CPAN的旧版本(5.004或更高版本).

你也可以探测UNIVERSAL::isa():

$x->isa('HASH')             # if $x is known to be an object
UNIVERSAL::isa($x, 'HASH')  # if $x might not be an object or reference

显然,你还必须检查ARRAYSCALAR类型.自Perl 5.003以来,UNIVERSAL模块(作为所有对象的基类)已经成为核心的一部分.

另一种方法 - 容易但有点脏 - 是将参考字符串化.假设类没有重载字符串化,你会得到类似的东西Class=HASH(0x1234ABCD),你可以解析它来提取底层数据类型:

my $type = ($object =~ /=(.+)\(0x[0-9a-f]+\)$/i);


你只想要eval {$ x-> isa($ type)}; 如果那不是一个对象,你就会失败.如果它不是正确的类型,那么你会得到错误,如果它是正确的类型,你就会变成现实.:)

2> Leon Timmerm..:

你可能不应该这样做.对象的基础类型是一个你不应该搞乱的实现细节.你为什么想知道这个?


后来我发现我可以使用Data :: Dumper :: sortkeys来过滤这些数据,因此Data :: Dumper不会产生兆字节的二进制输出.
推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有