2012-10-25 3 views
1

전역 해시를 만들었으며 perl 하위 루틴에서 해당 해시에 액세스하려고하면 액세스 할 수 없습니다.perl의 서브 루틴에서 전역 해시에 액세스

나는로 선언 : %HASH =();

과 같은 서브 루틴에 액세스하려고 :

$HASH{$key} = $value; 

내가

+1

동일한 파일의 하위 앞에 해시가 선언되어 있습니까? 당신은'엄격한 사용'과'경고 사용'을 가지고 있습니까? 더 많은 코드를 게시하십시오. – didster

+1

문제를 나타내는 관련 코드를 보여주십시오. – TLP

+0

도와 주셔서 감사합니다. 나는 배열을 사용하여 배열에 해시 값을 밀고 :push (@ {$ HASH {$ key}}, $ value) 그리고 배열을 정렬하지 않았으므로 값을 찾을 수 없으므로 액세스 할 수없는 것처럼 보였다. 내 잘못, 도움 주셔서 감사합니다 :) – iDev

답변

8

여기에 잘 작동 뭔가 잘못하고있는 중이 야 경우에 저를 인도하십시오 :

#!/usr/bin/env perl 

use strict; 
use warnings; 
use feature 'say'; 

our %truth =(); # "global" truth: lexical name 
       # for the package variable %main::truth 

sub add_to_truth { 
    my ($thing, $value) = @_; 
    $truth{$thing} = $value; 
} 

add_to_truth(answer => 42); 
say $truth{answer}; 

출력 :

strict URES에서 당신이 그들의 패키지 이름 (이 경우 %main::truth)와 "글로벌"변수를 완벽하게 자격 또는 our로의 어휘 범위 로컬 이름을 생성해야하는 것으로
42 

. 그리고 협박 (및 경고)없이 오늘날 프로그래밍은 이 아닙니다. ™이 아닙니다. 실제로, 그들을 활성화하면 유용하다고 말했을 것입니다.

+2

+1 Perl + 유머 =) –

+0

이 상황에서 '우리'가 꼭 필요한가요? 나는 '내'와 함께 해봤는데 잘 작동했다. 내가 알기에, '우리'는 이것을 전체 패키지와 공유하고자 할 때 사용됩니다. – tudor

관련 문제