前言
perl引用就是指標,可以指向變數、陣列、雜湊表(也叫關聯陣列)甚至子程式。pascal或c程式設計師應該對引用(即指標)的概念很熟悉,引用就是某值的位址,對其的使用則取決於程式設計師和語言的規定。在perl中,可以把引用稱為指標,二者是通用的,無差別的。引用在建立複雜資料方面十分有用。
下面的內容為學習筆記,例子都測試過了,效果不錯!
一、簡單的例子
引用變數$pointer存的是$variable的位址,
而不是值本身,要獲得值,形式為兩個$符號
#!/usr/bin/perl -w
my $value = 10;
$pointer = /$value;
printf "/n pointer address $pointer of $value /n";
printf "/n what pointer *($pointer) points to $$pointer/n";
列印結果:
pointer address scalar(0x182ba3c) of 10
what pointer *(scalar(0x182ba3c)) points to 10
二、引用和陣列
$pointer 儲存的是陣列的位址,通過呼叫 scalar 函式去獲得陣列的個數
並且通過加 $ 解引用這個位址。
#!/usr/bin/perl -w
use strict;
my @array_demo = (1,2,3,4);
my $pointer = /@array_demo;
printf "pointer address of array_demo = $pointer/n";
#呼叫函式scalar()獲得陣列的元素個數
my $i = scalar(@$pointer);
printf "number of arguments : $i /n";
#print the array all element
#通過引用訪問雜湊表的元素形式為$$pointer,
$i = 0;
foreach (@$pointer)
列印結果:
pointer address of array_demo = array(0x182ba84)
number of arguments : 4
0 : 1;
1 : 2;
2 : 3;
3 : 4;
三、引用與雜湊數列
與陣列類似,通過引用訪問雜湊表的元素形式為$$pointer,當然,$index是雜湊表的鍵值,而不僅是數字。還有幾種訪問形式,此外,構建雜湊表還可以用=>操作符,可讀性更好些。下面再看乙個例子:
#!/usr/bin/perl -w
use strict;
my %month = (
"01" => 'jan',
"02" => 'feb',
"03" => 'mar',
"04" => 'apr',
"05" => 'may',
"06" => 'jun',
);#print the hash address
my $pointer = /%month;
printf "/n address of hash = $pointer/n ";
# the following lines would be used to print out the
# contents of the associative array if %month was used.
foreach my $i (sort keys %month) /n";
}print "$$pointer","/n";
print "$pointer->","/n";
程式列印結果:
address of hash = hash(0x182ba1c)
01 is jan
02 is feb
03 is mar
04 is apr
05 is may
06 is jun
febmar
思考一下,這裡位址和實際的值使用上有什麼區別?
print "$$pointer","/n"; #這裡pointer 為位址
print "$month","/n"; #為實際的數值
print "$pointer->","/n"; #這個是比較方便的一種,速度塊並且易讀的一種寫法
四、多維陣列
#!/usr/bin/perl -w
use strict;
my $line = ['solid', 'black', ['1','2','3', ['4', '5', '6']]];
print "/$line->[0] = $line->[0] /n";
print "/$line->[1] = $line->[1] /n";
print "/$line->[2][0] = $line->[2][0] /n";
print "/$line->[2][1] = $line->[2][1] /n";
print "/$line->[2][2] = $line->[2][2] /n";
print "/$line->[2][3][0] = $line->[2][3][0] /n";
print "/$line->[2][3][1] = $line->[2][3][1] /n";
print "/$line->[2][3][2] = $line->[2][3][2] /n";
列印結果:
$line->[0] = solid
$line->[1] = black
$line->[2][0] = 1
$line->[2][1] = 2
$line->[2][2] = 3
$line->[2][3][0] = 4
$line->[2][3][1] = 5
$line->[2][3][2] = 6
五、引用與雜湊
#!/usr/bin/perl -w
use strict;
my %cube = (
'0'=>['0', '0', '0'],
'1'=>['0', '0', '1'],
'2'=>['0', '1', '0'],
'3'=>['0', '1', '1'],
'4'=>['1', '0', '0'],
'5'=>['1', '0', '1'],
'6'=>['1', '1', '0'],
'7'=>['1', '1', '1']
);my $pointer = /%cube;
foreach my $i (sort keys %$pointer) ;
my $z = $list->[0];
my $x = $$pointer->[1]; #指向陣列用 指向雜湊為{}
my $y = $pointer->->[2];
printf " point $i = $x,$y,$z /n";
}列印結果:
point 0 = 0,0,0
point 1 = 0,1,0
point 2 = 1,0,0
point 3 = 1,1,0
point 4 = 0,0,1
point 5 = 0,1,1
point 6 = 1,0,1
point 7 = 1,1,1
六、雜湊與子函式
#!/usr/bin/perl
sub errormsg ; # 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");
七、 陣列引用,
陣列的位址 / 引用 為位址,
位址通過加入 @解引用
#!/usr/bin/perl -w
use strict;
my @names =(1,2,3);
print "$#names,@names";
my $address = /@names;
sub listem
&listem(/@names);
perl學習筆記 解引用小結
目前正在自學perl,看到關於dereference的一些寫法 array1 qw a b c array2 qw d e f array array ref array 假如要訪問array1中的第2個元素,可以有如下幾種寫法 array 0 1 寫法一 0 1 寫法二 array ref 0 1...
Perl學習筆記 二 引用
perl學習筆記之perl的引用 首先,應該明確所有的引用都是用標量來表示的.對於標量引用陣列採用 ref 對 標量引用雜湊採用 ref 1 對陣列的引用,採用 符號.舉例 1 對變數的引用 my lines qw a b c my ref lines print 引用整個陣列 print 0 引用...
perl學習總結之引用
建立引用 建立規則1 在陣列或者雜湊前加反斜槓 aref array aref now holds a reference to array href hash href now holds a reference to hash 當引用被儲存在變數裡,就可以如普通變數般使用。建立規則2 items...