为何使用引用?
在perl4中,hash表中的value字段只能是scalar,而不能是list,这对于有些情况是很不方便的,比如有下面的数据:
Chicago, USA
Frankfurt, Germany
Berlin, Germany
Washington, USA
Helsinki, Finland
New York, USA
我们想要按国家将城市分类,每个国家后面对应城市列表,如果用perl4来做,必须将城市列表组合成字符串才行,如果用perl5就可以用引用来做,有了引用,就可以构造复杂的hash结构,就可以用列表作为hash的值了。
如何定义引用
方法一 使用斜线/
定义变量的时候,在变量名前面加个/,就得到了这个变量的一个引用,比如
代码如下:
# 数组的引用
my@array= (1,2,3) ;
my$aref=/@array ;
#哈希的引用
my%hash= ("name"=>"zdd","age"=>30,"gender"=>"male") ;
my$href=/%hash ;
#标量的引用
my$scalar=1 ;
my$sref=/$scalar ;
方法二 匿名引用
方法一不是很常用,最常用的还是匿名引用,方法如下
匿名数组引用-用[]定义
$aref= [ 1,"foo",undef,13 ];
匿名数组的元素仍然可以是匿名数组,所以我们可以用这种方法构造数组的数组,可以构造任意维度的数组。
my $aref = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
匿名哈希引用-用{}定义
$href= { APR =>4, AUG =>8 };
使用引用
定义了引用之后,可以使用不同的方法来访问引用,这里主要有三种方法。记忆这三种方法有个诀窍,将他们与普通的变量访问作比较即可。
方法一
与普通变量的访问方法相比,假设原来的变量名是name,则此方法在所有name出现的地方用$name代替,如下:
代码如下:
my $scalar = 1 ;
my @array = (1, 2, 3) ;
my %hash = ('zdd' => 30, 'autumn' => 27) ;
my $sref = /$scalar ; # scalar reference
my $aref = /@array ; # array reference
my $href = /%hash ; # hash reference
# 方法一
代码如下:
print $$sref, "/n" ; # 用$sref代替sref
print @$aref, "/n" ; # 用$aref代替aref
print %$href, "/n" ; # 用$href代替href
print $$aref[2], "/n" ;
print $$href{'zdd'}, "/n" ;
#方法二
代码如下:
#与普通变量的访问方法相比,假设变量原来的名字是name,则现在用{$name}来代替name。
@a @{$aref} An array
reverse@a reverse @{$aref} Reverse the array
$a[3] ${$aref}[3] An element of the array
$a[3] =17; ${$aref}[3] =17 Assigning an element
#同理,哈希引用的使用方法如下。
代码如下:
新闻热点
疑难解答