Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146844
  • 博文数量: 52
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-05 12:05
文章分类

全部博文(52)

文章存档

2013年(1)

2010年(3)

2009年(6)

2008年(25)

2007年(17)

我的朋友

分类:

2010-02-06 22:53:30

1.1      PERL引用(指针)

 

指针可以看作是存储内存地址的变量。

有两种方法创建指针。

第一种方法:

$var = ‘vstring’;

$vref = \$var;

 

@array = qw(var1 var2 var3);

$aref = \@array;

 

%hash = ( ‘searching’ => ‘google’, ‘im’ => ‘qq’);

$href = \%hash;

 

 

第二种方法,

 

$aref = [ ‘var1’, ‘var2’, ‘var3’ ];

$href = { ‘searching’ => ‘google’, ‘im’ => ‘qq’};

 

这两种方法效果一样的。

 

举个例子,

 

@$pointer来访问数组中的元素。形式@$pointer的意义为取出$pointer中的地址值当作数组使用

 

(这句话来自PERL5教程中的解释)

 

1.2      使用引用

一般在创建复杂数据结构的时候要用到引用,比如数组中的数组,HASH中的HASHHASH中的数组,数组中的HASH就是些复杂结构,更复杂的也可以用PERL语言来表达,比如HASH里包含数组,数组里还包含HASH

 

为什么创建复杂数据结构的时候要用到引用呢? 因为在PERL中,所有的数据结构始终是一维的, 所以如果HASH中要包含数组, key不能直接指向数组,而只能包含数组的引用。

 

@detail = qw (zhang wang li);

现在hash结构%info的一个key是‘key’的键指向@detail数组,可以写成下面的样子

 

$info{‘key’} = \@detail;

print $info{‘key’}->[0].”\n”;

#这里就打出 zhang;

 

因为$info{‘key’}最后的值是指向一个数组的引用,如果解引用后$info{‘key’}就是一个数组, 也就是@$info{‘key’}}这个数组,所以上面的写法可以简单的写成

@{info{‘key’}} = @detail;

print $info{‘key’}->[0].”\n”;

#这里就打出 zhang;

 

上面这个例子就是前面提到的hash结构里包含数组,下面接着介绍一下数组里数组。

 

用上面的第二种创建引用的方法, 假设一维数组的第一个元素$array[0] 指向一个数组的指针。

$array[0] = [zhang, wang, li];

我们就可以用$array[0]->[0]来表示其指向的数组的第一个元素即zhang

print $array[0]->[0].”\n”;

 

然而由于perl语言中的箭头规则是,下标之间的箭头是可以省略,所以$array[0]->[0]又可以写成$array[0][0] 这样看来这个不就是二维数组的第一个角吗?数组中的数组就是二维数组。

 

同样数组中的HASH, HASH中的HASH也可以用上面方式来表达。这就是引用的作用之一。

 

引用的另外一个作用是如果你想把复杂数组结构传到子程序中,或者传到类方法中。因为传进去的参数PERL是用@_来表达的,@_也是一个数组,他把第一个参数,第二个,第三个 ….全放到数组@_中。  如果你传个数组进去,@_他就不知道怎么处理,全部放到一个数组里那显然是不行的,所以你只能传引用进去。 然后在方法里解引用。

 

@array = (1,2,3);

$ref = \@array;

@array_new = @{$ref}; #--> 这个过程就称为解引用,把引用里的东

print $array_new[0];    #西取出来就是解引用。
阅读(666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~