2012-08-10 3 views
2

간단한 질문의 종류지만, 저를 혼란스럽게하고 Google은 저를 잘못 유도합니다. 해시 이름을 출력하는 것뿐입니다. 예 :어떻게 Perl에 해시 이름을 인쇄합니까?

&my_sub(\%hash_named_bill); 

&my_sub(\%hash_named_frank); 

sub my_sub{ 

    my $passed_in_hash = shift; 

    # do great stuff with the hash here 

    print "You just did great stuff with: ". (insert hash name here); 

} 

괄호 안에 내용을 가져 오는 방법 (삽입 ...)은 잘 모릅니다. 중첩 해시의 경우 "keys"태그를 사용하여 해시 이름을 가져올 수 있습니다 (원하는 경우). 나는 전체 해시 이름을 얻는 방법을 알아낼 수 없다. 실제로는 다른 키처럼 보인다.

+1

수 없습니다. 하위는 해시 이름을 알 수 없습니다. –

+1

해시에는 이름이 없지만이를 가리키는 변수는이 게시물에서 변수 이름에 액세스하는 방법을 확인하십시오. http://stackoverflow.com/questions/5199860/get-variable-name- as-string-in-perl – hackattack

+1

나는 이것이 좋은 생각이라고 생각하지 않는다. 이것은 Perl에서 가능할 수있는 것들 중 하나이지만, 그렇게해서는 안된다는 것을 의미하지는 않습니다. – zostay

답변

9

, 질문에 대한 기술적 인 대답은 그러나 당신이 옳은 일을하고 있는지 고려해야한다 Get variable name as string in Perl

에 대한 답변에서 찾을 수 있습니까?

어쨌든 해시 이름을 알아야 할 경우 은 여러 해시를 이름이 키가되는 해쉬 해시로 숨기면 더 쉽게 문제를 해결할 수 있습니다 (친숙해야 함). 당신이 당신의 질문에서 접근법을 언급 한 것처럼).

+0

니스, 팁 주셔서 감사합니다. 서브 루틴을 재귀 적으로 사용하려고했습니다. 서브 루틴 내에서 이름을 가진 해시를 계속 만들 수있을 것 같아요? –

+0

@ thomas.cloud - 아주 맞습니다. 도움이 필요하면 할 일에 대한 정확한 세부 정보를 새 질문에 추가하십시오. – DVK

+0

좋은 선생님이 되실 것입니다! –

2
$hash_named_bill{name} = "bill"; 
$hash_named_frank{name} = "frank"; 

&my_sub(\%hash_named_bill); 
&my_sub(\%hash_named_frank); 

sub my_sub{ 

    my $passed_in_hash = shift; 

    # do great stuff with the hash here 

    print "You just did great stuff with: ". $passed_in_hash->{name}; 

} 
1

해시는 이름 (또는 둘 이상)을 연결할 수있는 메모리 조각입니다.

당신은 변수의 이름을 인쇄 할 경우, 즉 (haccattack 설명을 참조) 매우 간단하지, 그리고 아주 잘 냄새가 나지 않습니다 (당신은 당신이 정말 필요 확신?)

또한 수 (이 시나리오에 맞는 경우) ") 소프트 (또는 상징적 참조를"고려 : 여기

%hash1 = (x => 101, y => 501); 
%hash2 = (x => 102, y => 502); 

my_sub("hash1"); 
#my_sub(\%hash1); # won't work 
my_sub("hash2"); 

sub my_sub { 
     my $hashname = shift; 
     print "hash name: $hashname\n"; 
     print $hashname->{x} . "\n"; 
} 

을 당신이 대신에 (하드) 참조의 변수의 함수에 이름을 전달한다. Perl에서 이것은 역 참조를 할 때 동일하게 느껴진다는 점에 유의하십시오 (주석 달기를 시도하십시오 (my_sub(\%hash1);)). @hackattack이 코멘트에 말했듯이

+3

FYI와 마찬가지로 : 심볼릭 참조를 사용하는 것은 깔끔한 트릭이지만 일반적으로 나쁜 것으로 간주되며 좋은 이유가없는 한 프로덕션 코드에 사용하면 안됩니다. – DVK

+2

'엄격한 사용'을하지 않으면이 방법이 효과적입니다. 'my_sub' 내부의'no strict'를 사용하여 절충안으로'my_sub' 내부를 엄격하게 끌 수 있습니다. – zostay

+0

변수는 이름과 저장소 간의 연결입니다. "변수"는 연관성을 나타냅니다. 변수는 관련된 것 중 하나가 아닙니다. 결정된. – ikegami

2

해시를 나타내는 데 이름을 사용할 수 있지만 해시 자체에는 이름이 없습니다. 해시 (x=>3, y=>4)을 포함 염두에

*foo = {}; 
*bar = \%foo; 
$foo{x} = 3; 
$bar{y} = 4; 

상태 유지 : 예를 들어, 다음 사항을 고려 해시 무명인가? 'foo'라고? 'bar'라고? 무엇보다도? 위의 어느 것도?

가장 좋은 답변은 PadWalker입니다. 프로덕션 환경에서 이름이나 그와 유사한 이름 (예 : 이름을 찾은 이름)을 사용하지 말 것을 권장합니다.

관련 문제