2014-07-10 2 views
1

좋아요. 더 자세히 설명하기 위해이 내용을 다시 작성하고 있습니다. 나는 Perl에 상당히 새로운 프로그래밍이므로 & 프로그래밍과 함께하시기 바랍니다. 본질적으로, 나는 그들이 동일한 디렉토리 내에서 왔을 때 메인 .pl 파일 내부에서 하나 이상의 파일 (모듈을 추측하고 있나?)을 어떻게 실행하는지 알고 싶다. 내 코드는 내 파일의 맨 아래에 서브 루틴으로 연결되어 있지만 서브 루틴을 꺼내 모듈로 변환하면 제대로 작동하지 않습니다.서브 루틴이 내 주요 함수와 같은 디렉토리에 있다면 어떻게 호출해야합니까?

+2

[**'require' **] (http://perldoc.perl.org/functions/require.html) – Prix

+0

@Prix LOL - 짧은 질문이므로 짧은 의견이 있으십니까? 당신이 옳을 수있는 동안 당신은 더 많은 설명을해야합니다. 여기에있는 모든 질문에 대해 누군가가 'RTFM에 대한 링크'로 대답 할 수 있지만, 이것이 바로 SOON의 핵심은 아닙니다. – jm666

+1

"서브 루틴 파일"이란 무엇입니까? 이 모듈들입니까? '.pl' 스크립트? – friedo

답변

1

다음 두 단계를 시작하면 도움이됩니다. 일부 서브 시스템을 패키지 MyModule으로 내 보냅니다.

먼저 주 프로그램과 동일한 디렉토리에 MyModule.pm을 만듭니다. 예를 들어 :

package MyModule; 
use warnings; use strict; 

sub foo { 
    my $p = shift; 
    print "foo called with param: $p\n"; 
    bar(); 
} 

sub bar { 
    print "bar called\n"; 
} 

1; # don't delete this line 

그런 다음 메인 프로그램에서이 패키지에서 잠수정을로드하고 호출 :

#/usr/bin/perl                                    
use warnings; use strict; 

use File::Basename qw(dirname); 
use lib dirname(__FILE__); # prepend source directory to the include path                     

use MyModule; 

MyModule::foo(42); 

use lib dirname(__FILE__) 모듈의 주요 프로그램의 소스 디렉토리를 앞에 추가되는 문 경로를 포함한다.

+0

실제로 lib 디렉토리 이름 (__ FILE__)을 사용하고 있습니까? 아니면 FILE을 위해 다른 것을 넣으십니까? 당신이 메인 프로그램의 소스 디렉토리를 모듈의 위치로 보내거나 그 반대로 보내는 것과 같은 것을 의미합니까? – John

+0

@ 존 : 네, [\ _ \ _ FILE \ _ \ _] (http://perldoc.perl.org/functions/__FILE__.html)를 사용하고 있습니다. 이것은 완전한 소스 프로그램 경로를 제공하는 Perl 마술 변수입니다. - 스누피 – dwarring

+0

@ 존 _prepend_함으로써, 나는 [@INC] (http://perldoc.perl.org/perlvar.html#%40INC) - 모듈 검색 경로로의 이동을 의미하지 않습니다. – dwarring

1

내가 만든 모든 서브 루틴 라이브러리 파일이 있는데, 이것을 util.pl이라고 부릅니다. $ HOME/perl/lib/util.pl에 있다고 가정 해 봅시다. 필요 '의 $ HOME/펄/lib 디렉토리/util.pl';

는 지금은/myscript.pl 내가 넣어 상단에

myscript.pl에서

, $ HOME/펄/프로젝트 1에서 펄 스크립트가

이제 myscript.pl에서 util.pl의 모든 서브 루틴을 호출 할 수 있습니다. 예를 들어, undupespace()는 util.pl에 있습니다. myscript.pl에서 나는 그것을 다음과 같이 부를 수있다 : $ s = undupespace ($ s);

모듈을 설치 한 후 이것을 myscript.pl 맨 위에 넣습니다. File :: Copy;

OP를 원했습니까?

+0

라이브러리 하나의 파일에 서브 루틴이 가득 찼습니까? 또는 개별 서브 루틴을 모두 포함하는 개별 파일의 폴더 위치? – John

관련 문제