Perl自学(11)——引用

本文参考博客

1. Perl 引用

定义变量的时候,在变量名前面加个\,就得到了这个变量的一个引用。

Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。

#标量引用
my$scalar=42;
my$sref=\$scalar ;

# 数组引用
my@array= (1,2,3) ;
my$aref=\@array ;

#哈希引用
my%hash= ("name"=>"foo","age"=>42,"gender"=>"male") ;
my$href=\%hash ;

#子程序引用
sub handler {return 1}
$coderef   = \&handler;

#句柄引用
$globref   = \*STDOUT;

1.1 匿名数组 

 定义一个普通数组:

my @a = (1,2,3);

 定义一个匿名数组引用:匿名数组引用-用 [ ] 定义

my $a = [1,2,3];

 定义一个以匿名数组引用为元素的数组(实际是二维数组):匿名数组的元素仍然可以是匿名数组,所以我们可以用这种方法构造数组的数组,可以构造任意维度的数组。

@a = (
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
)
#其中:$a[1][2]表示第二行第三列元素6.
#也可以写成$a[1]->[2],不过很少有人这么写。还可以写成${$a[1]}[2],几乎没人这么写!

 1.2 匿名哈希

匿名哈希引用:用 { } 定义

2. 取消引用

取消引用可以根据不同的类型使用 $, @ 或 % 来取消。

#!/usr/bin/perl
 
$var = 10;
 
# $r 引用 $var 标量
$r = \$var;
# 输出本地存储的 $r 的变量值
print "$var 为 : ", $$r, "\n";
 
@var = (1, 2, 3);
# $r 引用  @var 数组
$r = \@var;
# 输出本地存储的 $r 的变量值
print "@var 为: ",  @$r, "\n";
 
%var = ('key1' => 10, 'key2' => 20);
# $r 引用  %var 数组
$r = \%var;
# 输出本地存储的 $r 的变量值
print "\%var 为 : ", %$r, "\n";

执行以上实例执行结果为:
10 为 : 10
1 2 3 为: 123
\%var 为 : key110key220

2.1 解引用

2.1.1 数组解引用

@a          @{$aref}        #数组
reverse@a      reverse @{$aref}    
$a[3]        ${$aref}[3]       
$a[3] =17;      ${$aref}[3] =17      

2.1.2 哈希解引用 

%h          %{$href}         #哈希
keys%h        keys%{$href}        
$h{'red'}       ${$href}{'red'}       
$h{'red'} =17     ${$href}{'red'} =17    

注意:当{}内部是$var的形式时,{}是可以省略的,也就是说@{$aref}等价于@$aref,不过初学最好养成使用{}的习惯。

(本部分参考博文)

2.1.3 使用箭头解引用

前两种方法比较繁琐,这种很简洁,就是使用箭头符号 ->。

$aref->[]  #数组解引用

$href->{}  #哈希解引用

$href->()  #子过程解引用
$aref->[0] =3 ; 
$href->{name} ="autumn" ; 
$sref=2 ;

3. 引用函数

函数引用格式: \&

调用引用函数格式: & + 创建的引用名。

#!/usr/bin/perl
 
# 函数定义
sub PrintHash{
   my (%hash) = @_;
   
   foreach $item (%hash){
      print "元素 : $item\n";
   }
}
%hash = ('name' => 'runoob', 'age' => 3);
 
# 创建函数的引用
$cref = \&PrintHash;
 
# 使用引用调用函数
&$cref(%hash);

执行以上实例执行结果为:
元素 : age
元素 : 3
元素 : name
元素 : runoob

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值