2012-03-18 4 views
3

서브 루틴으로 전달되는 변수의 유형을 가져오고 싶습니다. 인터넷 검색에서 아래의 솔루션을 발견했지만 만족스러운 결과를 얻지 못했습니다. 내 문제는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

+0

@mob, 예, 객체를'STRING' 클래스로 축복 한 예입니다. 나는 언급했다. – cjm

+0

내가 대답하기 전에 전체 답변을 읽기 시작해야합니다. – mob

2

그래서 다음, 구글하지 않습니다. 대신에 공식 문서를 읽으십시오.

ref은 스칼라에 대해 빈 문자열을 반환합니다.

관련 문제