2012-09-15 2 views
1

처음으로 모듈로 작업하고 있습니다. 모듈의 해시 내용을 주요 perl 코드로 가져 오려고합니다. 다음은 모듈에서 해시를 주 Perl 코드로 가져 오기

다음은 주요 프로그램은

use warnings; 
use strict; 
use DRUG; 

foreach my $nme (keys %DRUG){ 
print "$nme\n"; 
} 

내가 모듈에서 해시 정보를 얻을 수 없습니다 오전 수 모듈에 해시 존재에 액세스를 시도이며, 모듈 DRUG.pm

package DRUG; 
require Exporter; 

our @ISA = qw(Exporter); 
our @EXPORT = qw(%DRUG); 

%DRUG = (
    'warfarin ' => 1, 
    'midazolam ' => 1, 
    'acebutolol ' => 1, 
); 

입니다 메인 펄 코드에서 그 해쉬를 출력하지 않는다.

이 문제를 도와 줄 수 있습니까?

감사

+0

나는 DRUG 대신 drugnames를 사용한다고 선언했다. 주 프로그램에서. 방금 편집했습니다. –

+0

질문에 문제를 해결해서는 안됩니다. 그것은 대답을 다소 이상하게 읽게합니다. – Borodin

답변

3

하지

use DrugNames; 

use DRUG; 

해야하며, 당신은 DRUGS.pm의 끝에 1; 필요

+0

나는 당신이 제안한 것을 바로 잡았습니다. 나는 여전히이 오류가 발생한다 : 글로벌 심볼 "% DRUG1"은 invitro.pl 라인 11에 명시 적 패키지 이름을 요구한다. 컴파일 오류로 인해 invitro.pl의 실행이 중단되었다. –

1

사용하기 간단하지만 DRUG의 내용을 사용할 수 있도록하는 수출업자 " 접근 자 "방법이 선호됩니다.

이것은 현재 이름 공간이 패키지의 변수로 "오염"되지 않는다는 장점이 있습니다.

또한 내용을 변경하지 않으려면 Readonly 변수를 사용하는 것이 좋습니다.

파일 main.pl

`

use warnings; 
use strict; 
use DRUG; 

my $drug = DRUG->get_drug(); 
foreach my $nme (keys %$drug){ 
    print "$nme\n"; 
} 

`

파일 DRUG.pm

`

package DRUG; 
use strict; 
use Readonly; 

Readonly my $DRUG => { 
    'warfarin ' => 1, 
    'midazolam ' => 1, 
    'acebutolol ' => 1, 
}; 

sub get_drug{ 
    return $DRUG; 
} 

1; 

`

관련 문제