Perl 学习笔记(12) -- 引用

原创 2012年03月22日 23:40:28

引用

  • 引用就是指针,可以指向变量、数组、哈希表(也叫关联数组)甚至子程序。Perl5中的两种引用类型为硬引用和符号引用。符号引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号引用就象文件名或UNIX系统中的软链接。而硬引用则象文件系统中的硬链接
  • 有多种构建引用的方法,几乎可以对任何数据建立引用,如数组、简单变量、子程序、文件句柄,以及C程序员会感兴趣的引用。Perl使你有能力写出把自己都搞糊涂的极其复杂的代码。:)
    • 使用反斜线(\)操作符, 反斜线操作符与C语言中传递地址的操作符&功能类似。一般是用\创建变量又一个新的引用。下面为创建简单变量的引用的例子:
      $variavle = 22;
      $pointer = \$variable;
      $ice = "jello";
      $iceprt = \$ice;
    • 引用$pointer指向存有$variable值的位置,引用$iceptr指向"jello"。即使最初的引用$variable销毁了,仍然可以通过$pointer访问该值,这是一个硬引用,所以必须同时销毁$pointer和$variable以便该空间释放到内存池中。到$pointer给出地址,而$$pointer给出$variavle的值
  • 引用和数组, 对数组和哈希表可以象对简单变量一样使用反斜线操作符.数组的引用如下:
    $pointer = \@ARGV;
    printf "\n Pointer Address of ARGV = $pointer\n";
    $i = scalar(@$pointer);
    printf "\n Number of arguments : $i \n";
    $i = 0;
    foreach (@$pointer) {
    printf "$i : $$pointer[$i++]; \n";}
    对于哈希的引用可以用%$pointer进行引用。哈希键值的引用$$pointer{$i},${$pointer}{$i} ,$pointer->{$i}\\
  • 多维数组或哈希,利用数组或哈希的值可以是引用的特点,可以创建多维数组或哈希,还可以是混合的哈希数组,数组哈希之类的数据结构。
  • 子程序的引用。子程序的返回值不仅限于数据,还可以返回子程序的引用。返回的子程序在调用处执行,但却是在最初被创建的调用处被设置
    sub errorMsg {
    my $lvl = shift;
    # define the subroutine to run when called. # return sub {
    my $msg = shift; # Define the error type now.
    print "Err Level $lvl:$msg\n"; }; # print later. 
    }
    $severe = errorMsg("Severe");
    $fatal = errorMsg("Fatal");
    $annoy = errorMsg("Annoying");
    &$severe("Divide by zero");
    &$fatal("Did you forget to use a semi-colon?");
    &$annoy("Uninitialized variable in use");
    结果输出如下:
    Err Level Severe:Divide by zero
    Err Level Fatal:Did you forget to use a semi-colon?
    Err Level Annoying:Uninitialized variable in use
  • 数组与子程序。 数组利于管理相关数据,本节讨论如何向子程序传递多个数组。前面我们讲过用@_传递子程序的参数,但是@_是一个单维数组,不管你传递的参数是多少个数组,都按序存贮在@_中,故用形如my(@a,@b)=@_; 的语句来获取参数值时,全部值都赋给了@a,而@b为空。那么怎么把一个以上的数组传递给子程序呢?方法是用引用。将实参数组以应用的方式传给子函数。
  • 文件句柄的引用.有时,必须将同一信息输出到不同的文件,例如,某程序可能在一个实例中输出到屏幕,另一个输出到打印机,再一个输出到记录文件,甚至同时输出到这三个文件。相比较于每种处理写一个单独的语句,可以有更好的实现方式如下:
    spitOut(\*STDIN);
    spitOut(\*LPHANDLE);
    spitOut(\*LOGHANDLE);
    其中子程序spitOut的代码如下:
    sub spitOut {
    my $fh = shift;
    print $fh "Gee Wilbur, I like this lettuce\n";
    }

PERL 引用与解引用

PERL 语言中的引用与解引用,PERL 语言中的引用在用法上与C/C++本质上是相同的,而且为列表和哈希的多层嵌套提供了方法。引用本质上把列表和哈希转换成了标量的别名。因为在列表和哈希的元素只能是标...
  • abccheng
  • abccheng
  • 2015年11月23日 22:05
  • 1598

Perl引用,解引用的对比总结(转)

Perl引用,解引用的对比总结   标量数组散列函数定义符号$@%&定义$test@test%testSub test使用$test = ‘a’@test = (1,2,3)%test = (‘a’...
  • zxianyong
  • zxianyong
  • 2010年09月21日 10:56
  • 4035

perl的一些学习笔记

今天起,这篇文章来记录一些perl的学习笔记,希望能坚持下去,持续更新。 1、先上一段perl读取配置文件,连接数据库的代码。 config.ini--数据库的连接字符串配置文件: =127.0.0....
  • zyujie
  • zyujie
  • 2013年11月14日 11:29
  • 940

[Perl系列—] 2. Perl 中的引用用法

Perl 中的引用,为什么要使用引用?对于熟悉C语言的开发者来说, 指针这个概念一定不陌生。Perl 的引用就是指针,可以指向变量、数组、哈希表甚至子程序。Perl5中的两种Perl引用类型为硬Per...
  • oscar999
  • oscar999
  • 2014年06月25日 08:45
  • 2416

Perl--函数引用

函数的引用: $ref=\&func; (func的定义在其他位置),不要(),当\&func()时为执行函数,返回值再引用。 当\&func()时为执行函数,返回值再引用。 [o...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2014年12月16日 21:01
  • 866

简述perl的引用(包括标量、数组、hash等数据类型的引用)

perl的引用 数组的解引用 二维数组的引用 perl的引用,类似C语言的指针;意义都是指向一个内存空间的地址。比如下述例子中,脚本输出的信息SCALAR(0x7836d0)代表标量数据的存储地址;A...
  • u011729865
  • u011729865
  • 2017年05月07日 10:29
  • 894

Perl——哈希的创建和引用

语法  创建'引用'仅有两种方法,使用它也是两种。  创建引用  创建规则 1  如果你在一个变量前加一个'/'号,你就得到了这个变量的'引用'。      $aref = ...
  • yanfangphp
  • yanfangphp
  • 2013年12月23日 17:08
  • 1062

perl的foreach赋值是引用

这个程序将会把@a数组中所有的元素先逐个引用给$counter,然后把$counter地值打印出来。注意,我这里说得是引用,不是赋值,perl里面的“=”实际上是在进行引用,而不是赋值,这是需要同c严...
  • jiangredsheep
  • jiangredsheep
  • 2005年11月22日 14:51
  • 3233

perl 引用(数组和hash引用)

转自:http://www.chinaunix.net/old_jh/25/504623.html 为推广perl尽一点力,特将perl引用的一篇文章翻译了一下,没有仔细查错,有问题请和我联...
  • fangwei1235
  • fangwei1235
  • 2013年02月05日 10:23
  • 1629

perl学习笔记

总体感觉perl不是很难,基本的程序思想和C,JAVA都差不多,在标量上的定义,只有数字和字符串两种。变量定义很特别用$加变量名,本以为JAVASCRIPT已经很随意了,现在发现PERL更是随意。看到...
  • ifloveher
  • ifloveher
  • 2007年01月18日 10:30
  • 365
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Perl 学习笔记(12) -- 引用
举报原因:
原因补充:

(最多只允许输入30个字)