Perl檢查引用型別

2021-09-08 22:59:22 字數 1456 閱讀 4585

有時候可能會需要檢查引用是什麼型別的,免得我們期待是乙個陣列引用,卻給了乙個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...