当前位置: 首页 > news >正文

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函数也用来检测类型,它还适用于对象相关的检测。

相关文章:

  • 网络七层协议
  • django中获得当前域名
  • Java编程基础24——递归练习
  • E-HPC支持多队列管理和自动伸缩
  • 聊聊我的linux系统学习之路
  • Python3将ipa包中的文件按大小排序
  • 2018 php 面试
  • 【网络文摘】一位36岁程序员的困惑
  • rabbitMQ 常用命令
  • Benefits of encapsulation
  • 【附node操作实例】redis简明入门系列—字符串类型
  • [译] 尤雨溪:Vue 3.0 计划
  • 接口使用
  • java中如何模拟真正的同时并发请求?
  • P3807 【模板】卢卡斯定理
  • Create React App 使用
  • Date型的使用
  • Java多线程(4):使用线程池执行定时任务
  • JS题目及答案整理
  • php面试题 汇集2
  • React-redux的原理以及使用
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SpriteKit 技巧之添加背景图片
  • V4L2视频输入框架概述
  • vue 个人积累(使用工具,组件)
  • 基于web的全景—— Pannellum小试
  • 每天一个设计模式之命令模式
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 区块链共识机制优缺点对比都是什么
  • 如何选择开源的机器学习框架?
  • 深入 Nginx 之配置篇
  • 使用 @font-face
  • 使用common-codec进行md5加密
  • 使用docker-compose进行多节点部署
  • 微信小程序填坑清单
  • 写代码的正确姿势
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 阿里云ACE认证之理解CDN技术
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​学习一下,什么是预包装食品?​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • (23)Linux的软硬连接
  • (BFS)hdoj2377-Bus Pass
  • (附源码)php新闻发布平台 毕业设计 141646
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET成年了,然后呢?
  • .NET框架设计—常被忽视的C#设计技巧
  • @RequestMapping用法详解
  • [AutoSAR系列] 1.3 AutoSar 架构