Perl 引用(即指標) 學習筆記

2021-09-30 06:42:37 字數 4339 閱讀 7344

前言

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...