有時候可能會需要檢查引用是什麼型別的,免得我們期待是乙個陣列引用,卻給了乙個hash引用。
ref函式可以用來檢查引用的型別,並返回型別。perl中內建了如下幾種引用型別,如果檢查的不是引用,則返回undef。
scalar
array
hash
code
refglob
lvalue
format
iovstring
regexp
例如:
@name=qw(longshuai xiaofang wugui tuner);
$ref_name=\@name;
%myhash=(
longshuai => "18012345678",
xiaofang => "17012345678",
wugui => "16012345678",
tuner => "15012345678"
);$ref_myhash =\%myhash;
print ref $ref_name; # array
print ref $ref_myhash; # hash
於是,可以對傳入的引用進行判斷:
my $ref_type=ref $ref_hash;
print "the expect reference is hash" unless $ref_type eq 'hash';
上面的判斷方式中,是將hash字串硬編碼到**中的。如果不想硬編碼,可以讓ref對空hash、空陣列等進行檢測,然後對比。
ref # 返回array
ref {} # 返回hash
之所以可以對它們進行檢測,是因為它們是匿名陣列、匿名hash引用,只不過構造出的這些匿名引用裡沒有元素而已。也就是說,它們是空的匿名引用。
例如:
my $ref_type=ref $ref_hash;
print "the expect reference is hash" unless $ref_type eq ref {};
或者,將hash、array這樣的型別定義成常量:
use constant hash => ref {};
use constant array => ref ;
print "the expect reference is hash" unless $ref_type eq hash;
print "the expect reference is array" unless $ref_type eq array;
除此之外,scalar::util
模組提供的reftype函式也用來檢測型別,它還適用於物件相關的檢測。 perl陣列硬引用 perl中的引用
為什麼使用引用?在perl4中,hash表中的value欄位只能是scalar,而不能是list,這對於有些情況是很不方便的,比如有下面的資料 chicago,usa frankfurt,germany berlin,germany washington,usa helsinki,finland n...
Perl 函式引用
函式的引用 ref func func的定義在其他位置 不要 當 func 時為執行函式,返回值再引用。當 func 時為執行函式,返回值再引用。oracle jhoa 3 cat 3.pl sub generate greeting 引用 rs generate greeting print rs...
perl 引用備忘
ref是乙個匿名陣列引用,同時巢狀著匿名陣列引用,匿名雜湊引用 my ref 1,2,3,a b c 訪問其中的乙個元素1 printf d n ref 0 printf d n ref 0 printf d n 0 訪問其中的乙個巢狀的匿名陣列引用的值a printf s n ref 3 0 pr...