2014-04-17 4 views
0

내가 알 필요가 있다면 잘 여부 모듈을 사용하여이 연습 :펄 순환 사용 모듈

MyApp.pm

package MyApp; 
use Moose; 
use MyApp::View; 
use MyApp::Config; 

sub view { 
    return MyApp::View->new; 
} 
sub config { 
    return MyApp::Config->new; 
} 

의 MyApp/View.pm

package MyApp::View; 
use Moose; 
extends qw(MyApp); 

sub render { 
} 

MyApp를/구성 .pm

package MyApp::Config; 
use Moose; 
extends qw(MyApp); 

sub get { 
} 

App.cgi

#App.cgi 
use Moose; 
extends qw(MyApp); 
my $view = MyApp->view(); 
my $config = MyApp->config(); 
.... 

MyApp에서 "use MyApp :: View"를 사용하고 "확장 qw (MyApp);"를 사용했기 때문에 혼란 스럽습니다. 구성 모듈. 그것은 나쁜 순환으로 간주됩니까?

이것에 대한 아이디어 MyApp 모듈의 모든 메소드와 변수를 App.cgi의 동일한 인스턴스에있는 View 및 Config 모듈과 공유하려고합니다.

+0

무스를 사용하는 경우 생성자 ('sub new')를 직접 작성하지 않아도됩니다. 그것이 바로 무스입니다. – simbabque

+0

또한 코드에 오타가 있습니다. 정확한 코드를 질문에 복사하고 미리 실행하십시오. 실제로 이것을 시도 했습니까? – simbabque

+0

무스 코드에'sub new'라고 써야 할뿐만 아니라 그렇게하지 않으면 부수적이고 잘못되었습니다. – hobbs

답변

3

이것은 매우 정상적이며 특히 나쁘지 않습니다. 단주의해야 할 점은 컴파일하고 MyApp::ViewMyApp::Config의 패키지 본체을 실행하는 동안, MyApp 완전히 컴파일되지 않으며, MyAppMyApp::ViewMyApp::Config 부하 때까지 컴파일 계속할 수 없기 때문에 그 몇 가지 방법이 존재하지 않을 수도 있다는 점이다. 앱이 정상적으로 실행되는 동안 (use MyApp 완료 후) 아무런 문제가 없습니다. BEGIN 블록이나 패키지 몸체 자체에서 흥미로운 것을하지 않으므로 아무런 문제가 없습니다.

+0

조사 결과를 바탕으로 자동 로딩 모듈에 대한 검색을 한 결과 "autouse 'Carp'=> qw (carp croak)를 사용하고" 당신이 아라를 두려워하는 걸 풀 수 있습니다. 그게이 문제를 해결하고 아무런 문제가 없을까요? 그렇다면 왜 우리는 정말로 필요할 때까지 모듈로드를 지연시키기 위해 "autouse"를 항상 사용하지 않습니까? – daliaessam

+0

cpan에서 모듈 [다음] (http://search.cpan.org/~erwan/later-0.04/lib/later.pm)을 발견했으며'나중에 사용할 MyApp :: Config '와 같이 아주 쉽게 사용했습니다. '유일한 단점은 패키지와 호출자에 하위 AUTOLOAD를 주입한다는 것입니다. – daliaessam