【Perl学习笔记】1.perl的ref 函数
perl有引用的概念:一组数据实际上是另一组数据的引用。这些引用称为指针,第一组数据中存放的是第二组数据的头地址。引用的方式被用得相当普遍,特别是在面向对象的模块、函数的参数传递等常见。但perl对每个引用都是以一个普通的变量来定义的,有时候,如果数据的架构比较复杂,我们可能会困惑于某个变量所指向的地址的实际内容是什么?perl的ref函数就可以帮助我们。
一、说明
从perl自带的帮助说明可以了解相关的用法:
ref EXPR
ref Returns a non-empty string if EXPR is a reference, the empty
string otherwise. If EXPR is not specified, $_ will be used. The
value returned depends on the type of thing the reference is a
reference to. Builtin types include:
SCALAR
ARRAY
HASH
CODE
REF
GLOB
LVALUE
If the referenced object has been blessed into a package, then
that package name is returned instead. You can think of "ref" as
a "typeof" operator.
if (ref($r) eq "HASH") {
print "r is a reference to a hash./n";
}
unless (ref($r)) {
print "r is not a reference at all./n";
}
See also perlref.
二、举例
简单来说,就是如果一个变量是个引用,那ref就可以返回一个表示其实际引用对象的描述性字符串,否则就会返回空值。如果没有指定ref函数的参数,默认对$_变量操作。如果被引用的对象已经被打包,则会返回该包的名称,类似typeof操作符。
代码:
%hash=('Tom'=>'Male','Jerry'=>'Female');
$href=/%hash;
for $key (keys %$href) {
print $key." is ".$href->{$key};
print "/n";
}
if ( ref($href) eq "HASH" ) {
print "href is a reference to a hash./n";
}
unless ( ref($href) ) {
print "href is not a reference at all./n";
}
print "href is ",ref($href),"./n";
输出结果:
Jerry is Female
Tom is Male
href is a reference to a hash.
href is HASH
【Perl学习笔记】1.perl的ref 函数的更多相关文章
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法
python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...
- APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int k ...
- Flutter学习笔记(4)--Dart函数
如需转载,请注明出处:Flutter学习笔记(4)--Dart函数 Dart是一个面向对象的语言,所以函数也是对象,函数属于Function对象,函数可以像参数一样传递给其他函数,这样便于做回调处理: ...
- Objective-C学习笔记 利用协议实现回调函数
来源:http://mobile.51cto.com/iphone-278354.htm Objective-C学习笔记 利用协议实现回调函数是本文要介绍的内容,主要是实现一个显示文字为测试的视图,然 ...
- Perl 学习笔记-标量数据
最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...
- Perl 学习笔记-列表和数组
笔记来自<<Perl语言入门第5版>> 1. Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示 ...
- perl 学习笔记
一:基础 1:安装perl centos: yum -y install perl 官网:https://www.perl.org/ 升级到5.22:先下载,执行./i ...
- perl学习笔记--搭建开发环境
windows下perl开发环境搭建 perl下载地址:http://www.activestate.com/developer-tools 各个插件的安装方法:(通过代理上网的方法) 方法一:pad ...
随机推荐
- 关于 MyBatis MyBatis-Spring Jdbc 批量插入的各种比较分析
因为目前SME项目中编写了一套蜘蛛爬虫程序,所以导致插入数据库的数据量剧增.就项目中使用到的3种DB插入方式进行了一个Demo分析: 具体代码如下: 1: MyBatis 开启Batch方式,最普通的 ...
- emoji表情字符串 mysql 普通 utf8 格式无法存入
处理方法: 1.在可以忽略emoji表情的情况下,可以选择将emoji表情字符过滤掉,这样不用动mysql 表结构 过滤Java代码参考如下: public static String filt ...
- 管理 sendmail 的邮件队列
邮件队列是存储 sendmail 命令传送的邮件消息数据和控制文件的目录.缺省情况下,邮件队列是 /var/spool/mqueue. 邮件消息可能由于很多原因而排入队列. 例如: sendmail ...
- artdialog关闭弹出窗口
打开 function opentree(){ var dialog = art.dialog({ title: '选择提交部门', content:jQuery("#my ...
- 在git彻底删除commit记录的方法是什么?
在github上,如果非默认分支的话,直接用以下方法: git reset --hard <commit_id> git push origin HEAD --force 如是默认分支,需 ...
- Junit技巧
测试套件: @RunWith(Suite.class) @Suite.SuiteClasses({TaskTest1.class, TaskTest2.class, TaskTest3.class}) ...
- PADS无模命令总结
1.PADS2007无模命令与快捷键 <x.y>表示坐标.<s>表示文体.<n>表示数字. 1.[C]显示平面的焊盘和热焊盘(Thermal). 2.[D]显示当前 ...
- SDL介绍
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相似的代码就可以开发 ...
- 网易云课堂_C语言程序设计进阶_第5周:链表_1逆序输出的数列
1 逆序输出的数列(10分) 题目内容: 你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束.然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1. 输 ...
- 音乐ID3 中 专辑封面解析(APIC帧)
ID3V2 中 APIC 帧标识 专辑封面.前几天 百度 谷歌 都没有找到具体的说明.有点小伤人. 最好参考 Android 中的 id3.cpp 以及一个java 开源 id3 库.找到这里的规格 ...