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

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

How can I determine the type of a blessed reference in Perl?

在Perl中,对象只是对已被归入特定类的任何基本Perl数据类型的引用。 当您在无祝福的引用上使用ref()函数时,系统会告诉您引用指向的数据类型。 但是,当您在有祝福的引用上调用ref()时,将返回该祝福被引用到的包的名称。

我想知道该祝福引用的实际基础类型。 我该如何确定?


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

您还可以使用UNIVERSAL::isa()进行探测:

1
2
$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)的内容,可以对其进行解析以提取基础数据类型:

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

您可能不应该这样做。对象的基础类型是您不应弄混的实现细节。你为什么想知道这个?


我对此的第一个想法是:" Perl中的对象始终是哈希引用,那么该怎么做?"

但是,Scalar :: Util :: reftype是答案。感谢您在此处提出问题。

这是证明这一点的代码片段。(以防任何人使用它)。

1
2
3
4
5
6
7
$> perl -e 'use strict; use warnings"all";
            my $x = [1]; bless ($x,"ABC::Def");
            use Data::Dumper; print Dumper $x;
            print ref($x) ."\
";
            use Scalar::Util"reftype"; print reftype($x) ."\
"'
`

输出:

1
2
3
4
5
$VAR1 = bless( [
                 1
               ], 'ABC::Def' );
ABC::Def
ARRAY


推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    公共CPU接口类型的详细描述

    公共CPU接口类型的详细描述,,我们知道CPU是电脑的大脑, CPU的处理速度直接决定电脑的性能, 那你知道CPU发展到现在, 都那些CPU接口类型吗.

    主板类型百科全书(基于芯片分类)

    主板类型百科全书(基于芯片分类),,电脑维修基础之主板型号熟悉,主板芯片型号区分,涵盖nVIDIA系列intel系列AMD系列主板型号,主板型号大全内容较

    16天的最新的内存引用:4gb上涨10元

    16天的最新的内存引用:4gb上涨10元,,内存价格上涨到4GB 10元 在今天中关村的现货市场,内存价格总体呈发展趋势,但它是小的。内存市场昨日下

    excel常用函数都有哪些?

    excel常用函数都有哪些?,函数,哪些,常用,1、SUM函数:SUM函数的作用是求和。函数公式为=sum()例如:统计一个单元格区域:=sum(A1:A10)  统计多个

    wps如何生成引用

    wps如何生成引用,WPS教程,1.wps怎么添加引用文献wps添加引用文献:1、打开文档,点击WPS文字右侧下拉菜单。2、打开插入>引用>脚注与尾注3、选

    C上的引导检查文件系统:文件的类型

    C上的引导检查文件系统:文件的类型,,故障现象:系统检查启动检查文件 每一次你启动一台计算机,都会是这样的。 在d上检查文件系统: 该文件

    电脑硬盘接|电脑硬盘接口类型怎么看

    电脑硬盘接|电脑硬盘接口类型怎么看,,电脑硬盘接口类型怎么看方法如下:1、在计算机上点击右键,选择设备管理器;2、点开磁盘驱动器就可以看到