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

如何确定Perl中有福的参考类型?

发布时间:2020-12-15 21:19:18 所属栏目:大数据 来源:网络整理
导读:在Perl中,一个对象只是对已经被保存到特定类中的任何基本的Perl数据类型的引用。当你在一个无耻的引用上使用ref()函数时,你会被告知参考的数据类型是什么。但是,当您在一个有福的引用上调用ref()时,将返回引用已被保存的包的名称。 我想知道真正的基础类
在Perl中,一个对象只是对已经被保存到特定类中的任何基本的Perl数据类型的引用。当你在一个无耻的引用上使用ref()函数时,你会被告知参考的数据类型是什么。但是,当您在一个有福的引用上调用ref()时,将返回引用已被保存的包的名称。

我想知道真正的基础类型的祝福参考。我该如何确定?

解决方法

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

显然,您还需要检查ARRAY和SCALAR类型。 UNIVERSAL模块(作为所有对象的基类)自Perl 5.003以来一直是核心的一部分。

另一种方式 – 容易但有点脏 – 是引用引用。假设类没有重载字符串,你会得到类似于Class = HASH(0x1234ABCD)的东西,你可以解析它来提取底层数据类型:

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

(编辑:李大同)

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

    推荐文章
      热点阅读