2013-07-09 1 views
3

Perl 스크립트에서 단일 서브 루틴을 가져 오거나 내보내는 방법이 있습니까? 테스트 케이스를 양수 테스트와 음수 테스트로 나누어 달라는 요청을 받았으며 전체 서브 루틴을 복사하고 싶지 않습니다. 그러나 내가 require 또는 use의 긍정 테스트 케이스를 음수로 사용하면 일반적으로 이름이 지정된 모든 하위에 대해 redefined 경고가 표시됩니다. perl 프로그램에서 단일 서브 루틴 가져 오기

require/use "positive_test.pl" qw (useful_sub); 
#throws warning: Subroutine run_test redefined at ... 

require/use "positive_test.pl::useful_sub"; 
#throws can't locate in @INC error 

과 positive_test 스크립트의

: 여기에 내가 시도 몇 가지 대안

use base 'Exporter'; 
our @EXPORT = qw(useful_sub); 

나는 또한 시도 사용은 새로운 서브 루틴 네임 스페이스 내에서 필요합니다. 나는 무엇을 놓치고 있습니까, 아니면 경고없이 '재정의 (redefine)'래퍼 내에 모든 공통 모듈 이름을 래핑해야합니까? 귀하의 도움에 감사드립니다

답변

3

아마도 가장 좋은 것은 : 리팩토링을하십시오. 내보내려는 모든 하위가 포함 된 .pm 파일을 새로 만듭니다. 펄이 리팩토링없이 이러한 문제의 주위에 해킹과

은 물론이 가능합니다. 예를 들어, 당신이 필요로 호출하기 전에 다른 패키지로 전환 할 수있다 :이 경우에 당신이 전혀 수출을하지 않아도

{ 
    package AnotherPackage; 
    require "positive_test.pl"; 
} 

AnotherPackage::useful_test(); 

참고.

+0

일부 리팩터링을해야했습니다. 당신이 제공 한 솔루션은 제한된 경우에 잘 작동하지만 Perl의'require'는 해결하기가 너무 어려운 단일 인스턴스 만로드 할 수 있습니다 – paulski