【Perl学习笔记】1.perl的ref 函数

perl有引用的概念:一组数据其实是另外一组数据的引用。这些引用称为指针,第一组数据中存放的是第二组数据的头地址。引用的方式被用得至关广泛,特别是在面向对象的模块、函数的参数传递等常见。但perl对每一个引用都是以一个普通的变量来定义的,有时候,若是数据的架构比较复杂,咱们可能会困惑于某个变量所指向的地址的实际内容是什么?perl的ref函数就能够帮助咱们。架构


1、说明
从perl自带的帮助说明能够了解相关的用法:less

引用
$ perldoc -tf ref
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.

2、举例
简单来讲,就是若是一个变量是个引用,那ref就能够返回一个表示其实际引用对象的描述性字符串,不然就会返回空值。若是没有指定ref函数的参数,默认对$_变量操做。若是被引用的对象已经被打包,则会返回该包的名称,相似typeof操做符。
代码:

#!/usr/bin/perl -w
%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";

输出结果:
引用
$ perl testref.pl Jerry is Female Tom is Male href is a reference to a hash. href is HASH