2012-03-18 58 views
3

我想獲取傳遞給子例程的變量類型。使用Google搜索時遇到了下面的解決方案,但是這並沒有給出令人滿意的結果。 我的問題是在下面的示例中檢查perl中子程序中傳遞的變量類型

sample("test"); 
    sample(\%a); 

    sub sample { 
     my ($argv1) = @_; 
     if(ref($argv1) eq "STRING") { 
     print "string\n"; 
     } 
     elsif(ref($argv1) eq "HASH") { 
     print "HASH\n"; 
     } 

    } 

回答

8

ref從不生成 「STRING」 示出。 (當然,除非你創建一個STRING類和祝福的對象到它。)一個正常的字符串不是一個參考,所以ref返回false值:

sample("test"); 
sample(\%a); 

sub sample { 
    my ($argv1) = @_; 
    if(not ref($argv1)) { 
    print "string\n"; 
    } 
    elsif(ref($argv1) eq "HASH") { 
    print "HASH\n"; 
    } 
} 
+0

嗯,有'$ foo = bless {},'STRING'; print ref($ foo)'...... – mob 2012-03-18 21:11:27

+0

@mob,是的,這是祝福對象進入'STRING'類的一個例子,我提到。 – cjm 2012-03-18 21:25:04

+0

我要評論前開始閱讀整個答案。 – mob 2012-03-18 21:38:20

2

所以不要谷歌,然後。請閱讀官方文檔。

ref返回標量的空字符串。