Perl检查引用类型
有时候可能会需要检查引用是什么类型的,免得我们期待是一个数组引用,却给了一个hash引用。
ref函数可以用来检查引用的类型,并返回类型。perl中内置了如下几种引用类型,如果检查的不是引用,则返回undef。
SCALAR
ARRAY
HASH
CODE
REF
GLOB
LVALUE
FORMAT
IO
VSTRING
Regexp
例如:
@name=qw(longshuai xiaofang wugui tuner);
$ref_name=\@name;
%myhash=(
longshuai => "18012345678",
xiaofang => "17012345678",
wugui => "16012345678",
tuner => "15012345678"
);
$ref_myhash =\%myhash;
print ref $ref_name; # ARRAY
print ref $ref_myhash; # HASH
于是,可以对传入的引用进行判断:
my $ref_type=ref $ref_hash;
print "the expect reference is HASH" unless $ref_type eq 'HASH';
上面的判断方式中,是将HASH字符串硬编码到代码中的。如果不想硬编码,可以让ref对空hash、空数组等进行检测,然后对比。
ref [] # 返回ARRAY
ref {} # 返回HASH
之所以可以对它们进行检测,是因为它们是匿名数组、匿名hash引用,只不过构造出的这些匿名引用里没有元素而已。也就是说,它们是空的匿名引用。
例如:
my $ref_type=ref $ref_hash;
print "the expect reference is HASH" unless $ref_type eq ref {};
或者,将HASH、ARRAY这样的类型定义成常量:
use constant HASH => ref {};
use constant ARRAY => ref [];
print "the expect reference is HASH" unless $ref_type eq HASH;
print "the expect reference is ARRAY" unless $ref_type eq ARRAY;
除此之外,Scalar::Util模块提供的reftype函数也用来检测类型,它还适用于对象相关的检测。
Perl检查引用类型的更多相关文章
- perl检查变量是否定义
my $label = defined($pieces[0]) ? $pieces[0] : ""; my @alreadyAddedCol = $node1->{DB}-& ...
- Perl系列文章
0.Perl书籍推荐 Perl书籍下载 密码:kkqx 下面是一些我学习Perl过程中读过完整的或部分章节的觉得好的书. 入门级别1:<Perl语言入门>即小骆驼 入门级别2:<In ...
- JS基础知识(基本类型 引用类型)
1,js中的 基本类型 引用类型 javascript中有两种变量类型:基本类型和引用类型,基本类型包括:Number.String.Undefined.Null.Boolean这五种,而引用类型 ...
- Java基础之集合与泛型
话不多说,直接上图 1.Collection集合小结 注意: 凡是使用哈希表保存对象的容器,保存的对象在容器中都是唯一的,唯一性是通过被保存对象的hashCode和equals方法共同确定: 凡是使用 ...
- 4. javacript高级程序设计-变量、作用域和内存问题
1.1 基本类型和引用类型的值 变量包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,引用类型值可以由多个值构成的对象 1.1.1 动态的属性 针对引用对象的值,可以为其 ...
- 深入Java虚拟机——类型装载、连接(转)
来自http://hi.baidu.com/holder/item/c38abf02de14c7d31ff046e0 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Ja ...
- javascript 最佳实践 ( 24 章 )
代码约定 易于维护, 形成了一套 JavaScript 代码书写的约定: 跟别的语言差不多, 不过 javascript 中的大括号一定要放在 行尾, 例如: function abc() { // ...
- Java中的重写
以下内容引用自http://wiki.jikexueyuan.com/project/java/overriding.html: 如果一个类从它的父类继承了一个方法,如果这个方法没有被标记为final ...
- 关于C#你应该知道的2000件事
原文 关于C#你应该知道的2000件事 下面列出了迄今为止你应该了解的关于C#博客的2000件事的所有帖子. 帖子总数= 1,219 大会 #11 -检查IL使用程序Ildasm.exe d #179 ...
随机推荐
- JavaScript基础视频教程总结(051-060章)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 解决YUM下Loaded plugins: fastestmirror Determining fastest mirrors 的问题
Centons下 其大概意思是fastestmirror不能使用,fastestmirror是yum的一个加速插件,具体我也没有仔细了解过,可能是系统不支持或者缺少组建导致的.处理办法就是禁用这个插件 ...
- REdis zset和double
平台:x86_64 结论:Zset的最大分数不要超过18014398509481982(17位数字,54位二进制),否则不会得到期望的值. REdis:5.0.4 Zset采用double存储分数值( ...
- 可遇不可求的Question之MySqlClient的Guid 类型的映射篇
关于 Guid 类型的映射 MySql 没有原生的 Guid 类型,一般使用 binary(16) 或者 char(36) 这两个类型.早期版本的 Connector/Net 将 binary(16) ...
- python 特别的生成器表达式
Ⅰ起因 学习python的同学通常会遇到这样一道经典生成器测试题: def gen(): for i in range(4): yield i base = gen() for n in (2,10) ...
- Nginx 教程(3):SSL 设置
SSL 和 TLS SSL(Socket Secure Layer 缩写)是一种通过 HTTP 提供安全连接的协议. SSL 1.0 由 Netscape 开发,但由于严重的安全漏洞从未公开发布过.S ...
- 【转】odoo nginx 配置
## OpenERP backend ## upstream odoo { server 127.0.0.1:8069 weight=1 fail_timeout=0; } upstream odoo ...
- wordpress背景添加跟随鼠标动态线条特效
今天看到别人的博客,在鼠标移动背景时会出现线条动态特效 感觉挺有意思的,还有另一种,在背景点击时会跳出字符特意去找了方法,以为需要添加代码的,结果只要安装个插件就可以了,所以说wordpress就是方 ...
- centos7使用wordpress布署网站(2)
1.接下来需要配置数据库,为使用wordpress做准备 修改认证方式: vim .../phpMyAdmin/config.inc.php [...] $cfg['Servers'][$i]['au ...
- 如何阅读Java源码?
阅读本文大概需要 3.6 分钟. 阅读Java源码的前提条件: 1.技术基础 在阅读源码之前,我们要有一定程度的技术基础的支持. 假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃< ...