perl的ref 函數
我們都知道perl有引用的概念:一組資料實際上是另一組資料的引用。這些引用稱為指標,第一組資料中存放的是第二組資料的頭地址。這部分的內容詳見:[原]《Perl 24小時教程》學習筆記:引用與結構。引用的方式被用得相當普遍,特別是在物件導向的模組、函數的參數傳遞等常見。但perl對每個引用都是以一個普通的變數來定義的,有時候,如果資料的架構比較複雜,我們可能會困惑於某個變數所指向的地址的實際內容是什嗎?perl的ref函數就可以協助我們。
一、說明
從perl內建的協助說明可以瞭解相關的用法:
引用$ perldoc -tf ref
ref EXPR
ref Returns a non-empty string if EXPR is a reference, the empty
string otherwise. If EXPR is not specified, $_ will be used. The
value returned depends on the type of thing the reference is a
reference to. Builtin types include:
SCALAR
ARRAY
HASH
CODE
REF
GLOB
LVALUE
If the referenced object has been blessed into a package, then
that package name is returned instead. You can think of "ref" as
a "typeof" operator.
if (ref($r) eq "HASH") {
print "r is a reference to a hash./n";
}
unless (ref($r)) {
print "r is not a reference at all./n";
}
See also perlref.
二、舉例
簡單來說,就是如果一個變數是個引用,那ref就可以返回一個表示其實際引用對象的描述性字串,否則就會返回空值。如果沒有指定ref函數的參數,預設對$_變數操作。如果被引用的對象已經被打包,則會返回該包的名稱,類似typeof操作符。
代碼:
#!/usr/bin/perl -w
%hash=('Tom'=>'Male','Jerry'=>'Female');
$href=/%hash;
for $key (keys %$href) {
print $key." is ".$href->{$key};
print "/n";
}
if ( ref($href) eq "HASH" ) {
print "href is a reference to a hash./n";
}
unless ( ref($href) ) {
print "href is not a reference at all./n";
}
print "href is ",ref($href),"./n";
輸出結果:引用$ perl testref.pl
Jerry is Female
Tom is Male
href is a reference to a hash.
href is HASH