9. 參考

什麼是參考(reference)?

所謂 "參考" 是指:一個純量變數,內含另一個變數的位址。在 Perl 中,稱此種參考為硬參考(Hard Reference)。

參考是 Perl 架構複雜資料結構的基石,在增進副程式傳值效率方面也有大用,更是 Perl 運用物件導向技術時重要的依靠。因此了解參考,是踏入 Perl 進階層級的第一步。參考的運算子為 \ 這個符號,只要在變前前加上 \ 即可。

9.1 常見的參考

Perl 常見的參考有以下幾種:

1. 純量參考:

$num=56;

# $scalar_ref 內含 $num 的位址
$scalar_ref = \$num;

# 只要在參考之前加上 $ ,即可取得原參考對象的內含值(即 56)
print $$scalar_ref;

2. 陣列參考:

@total=(1,2,4);

$array_ref = \@total;

# 只要在參考之前加上 @ ,即可取得原參考對象,即 @total
print @$array_ref;

3. 雜湊參考:


%all=(
	mmm => "KKK",
	nnn => "MMM"
);

$hash_ref = \%all;

# hash 參考可以利用 -> 來取得其鍵/值
print $hash_ref->{mmm};

# 加上 % 可以取得原雜湊

@keys = keys %$hash_ref;

4. 副程式參考:


sub max {
	my ($a, $b) = @_;

	($a > $b) ? $a : $b;
}

# $sub_ref 為 &max 副程式的參考
$sub_ref = \&max;

# 加上 & 即可呼叫該副程式
$max = &$sub_ref(5, 18);

print $max;

5. 檔案代碼參考(glob reference):


sub write_it {

	my $file= shift;

	print $file "test .....\n";

}

open(FHD, "> test.log") || die "$!\n";

# 將檔案代碼 FHD 傳入 write_it 副程式中
write_it(\*FHD);

close(FHD);