NOTE:
- Perl一直到Perl5才出現reference(在perl還沒有reference的概念之前,想要產生二維的陣列是挺困難的),當初為了讓perl5能夠擁有OOP(物件導向/面對對象)的概念,需要有reference的幫助,因此他也叫做物件參考指標。
- Reference產生很複雜的資料結構 ,對資料的處理有蠻好的彈性。
- Reference的種類 :
- 硬性 :
存記憶體位置(常見) - 軟性(aka symbolic reference象徵性參考指標) :
用變數名稱作為替代(少見)
- 參照的寫法:
- 一般來講reference的變數可以是純量變數,陣列跟雜湊
- 存取一個變數的作為reference只需要在變數前面加 "\" ,
- ex:
%my_hash = qw/name Win want_job Frontend age 24/;
$ref = \%my_hash - 取得reference的值
- 取得reference的值其實就是取得他在記憶體位置中的內容
- 要取得reference只需要在變數前面加上被參照的資料型態符號,ex:
- 以純量作為例子,純量的資料型態符號是$,所以若要取得$scalar的 值只需要在$scalars_reference前面再加一個$
$$scalars_reference = $scalar; - 以陣列作為例子,陣列的資料型態符號是@,所以若要取得$myarray的值只需要在$myarray_ref前面加一個@
@$myarray = $myarray; - 以雜湊為例子就是
%$my_hash_ref = %my_hash; - 另外以上的三個例子:
$$scalars_reference
@$myarray
%$my_hash_ref
也可以這樣寫.....(加個{ }而已xd)
$$scalars_reference = ${$scalars_reference}
@$myarray = @{$myarray }
%$my_hash_ref = %{$my_hash_ref} - 常數可以被參考嗎? ans : 可以
Example:取得一個array的reference:
my $ref = \@array;
print "將\@array的參照存在\$ref,print結果:\n";
print $ref."\n";
print "將\@array的參照存在\$ref,print結果:\n";
print $ref."\n";
印出 $ref可得到 ARRAY<0x4c70c8> -->0x4c70c8就是記憶體位置
Example:怎麼解開參照? 以一個陣列為例,解開參照,並使用陣列取得某個索引值:Ans: 用{}號將reference的變數包起來
my @friends = qw/Tree Bri May/;
my $fri_ref = \@friends;
print @{$fri_ref};
#利用陣列取得某個索引值:
print @{$fri_ref}[2]; #會得到May
my $fri_ref = \@friends;
print @{$fri_ref};
#利用陣列取得某個索引值:
print @{$fri_ref}[2]; #會得到May
Example:以Hash為例,解開參照,請以某個Key來取得值:
my %resume = qw/name Win want_job Frontend age 24/;
my $resume_ref = \%resume;
print ${$resume_ref}{name}; #得到win
print ${$resume_ref}{want_job}; #得到Frontend
print ${$resume_ref}{age}; #得到24
#將%resume當作一般的hash使用for印出
for (keys %{$resume_ref}){
print ${$resume_ref}{$_}."\n";
}
my $resume_ref = \%resume;
print ${$resume_ref}{name}; #得到win
print ${$resume_ref}{want_job}; #得到Frontend
print ${$resume_ref}{age}; #得到24
#將%resume當作一般的hash使用for印出
for (keys %{$resume_ref}){
print ${$resume_ref}{$_}."\n";
}
沒有留言:
張貼留言
若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD