分类:
2010-02-06 22:53:30
指针可以看作是存储内存地址的变量。
有两种方法创建指针。
第一种方法:
$var = ‘vstring’;
$vref = \$var;
@array = qw(var1 var2 var3);
$aref = \@array;
%hash = ( ‘searching’ => ‘google’, ‘im’ => ‘qq’);
$href = \%hash;
第二种方法,
$aref = [ ‘var
$href = { ‘searching’ => ‘google’, ‘im’ => ‘qq’};
这两种方法效果一样的。
举个例子,
@$pointer来访问数组中的元素。形式@$pointer的意义为“取出$pointer中的地址值当作数组使用”。
一般在创建复杂数据结构的时候要用到引用,比如数组中的数组,HASH中的HASH,HASH中的数组,数组中的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}; #--> 这个过程就称为解引用,把引用里的东