Perl에서 .pm (Perl 모듈)과 .pl (Perl 스크립트) 파일의 차이점은 무엇입니까?


88

.pm(Perl 모듈)과 .pl(Perl 스크립트) 파일 의 차이점은 무엇입니까 ?

우리 1가 파일에서 돌아온 이유도 알려주세요 . 2 또는 다른 것을 반환하면 오류가 발생하지 않는데 왜 1Perl 모듈에서 반환 합니까?


11
1상관 없다. 그것은 될 수 있고 2, 될 수도 있고 "foo", 될 수도 있습니다 ["a", "list"]. 중요한 것은 0, 또는 거짓으로 평가되거나 use실패 할 다른 것이 아니라는 것입니다.
Amadan 2010 년

.pl은 실제로 펄 라이브러리입니다. C 프로그램이나 다른 언어로 작성된 프로그램과 같은 펄 스크립트는 엔딩이 없습니다. 단, Windows와 같이 기능을 수행하는 데 필요한 운영 체제는 예외입니다.
모니카 기억

답변:


78

핵심에서 사용하는 파일 확장자는 perl 는 해당 파일을 해석하는 .

그러나 .pm패키지 이름을 따르는 특정 디렉토리 구조를 따르는 파일 에 모듈을 넣으면 편리합니다. 그래서, 당신은 모듈이 있다면 Example::Plot::FourD당신은 디렉토리에 넣어 Example/Plot/FourD.pm당신의 경로에 @INC다음 userequire같이 패키지 이름을 부여 할 때 옳은 일을 할 것입니다 use Example::Plot::FourD.

파일은 모든 초기화 코드의 성공적인 실행을 나타 내기 위해 마지막 문으로 true를 반환해야하므로, 1; 그렇지 않으면 true를 반환 할 것이라고 확신하지 않는 한 이러한 파일을 종료하는 것이 일반적 입니다. 그러나 1;문을 더 추가 할 경우를 대비 하여을 입력하는 것이 좋습니다 .

EXPR가 베어 워드 인 경우 는 require".pm"확장자를 가정하고 파일 이름에서 "::"를 "/"로 대체하여 표준 모듈을 쉽게로드 할 수 있습니다. 이러한 형태의 모듈로드는 네임 스페이스를 변경할 위험이 없습니다.

모든 use수행이 제공되는 패키지 이름에서 파일 이름, 파악하는 requireA의 그것을 BEGIN블록과 호출 import패키지에. 사용하지 않는 것을 방해하는 use것은 없지만 수동으로 이러한 단계를 수행하십시오.

예를 들어, 아래에서 Example::Plot::FourD패키지를라는 파일에 넣고 file t.pl의 스크립트에로드했습니다 s.pl.

C:\Temp> cat t.pl
package Example::Plot::FourD;

use strict; use warnings;

sub new { bless {} => shift }

sub something { print "something\n" }

"Example::Plot::FourD"

C:\Temp> cat s.pl
#!/usr/bin/perl
use strict; use warnings;

BEGIN {
    require 't.pl';
}

my $p = Example::Plot::FourD->new;
$p->something;


C:\Temp> s
something

이 예제는 모듈 파일이으로 끝나지 않아도되며 1모든 참 값 이 가능함을 보여줍니다 .


-2

.pl은 단일 스크립트입니다.

.pm ( Perl Module )에는 다른 Perl 스크립트에서 사용할 수있는 함수가 있습니다.

Perl 모듈은 Perl 프로그램이나 다른 Perl 모듈에서 사용할 수있는 자체 포함 된 Perl 코드입니다. 개념적으로 C 링크 라이브러리 또는 C ++ 클래스와 유사합니다.


5
".pl은 단일 스크립트입니다." 사실이 아니다. .pl 확장자를 가진 Perl 프로그램을 식별해야하는 것은 손상된 운영 체제에서만 가능합니다. 그리고 원래 .pl은 "Perl 라이브러리"- "require"또는 "do"명령으로로드 한 외부 서브 루틴을 나타냅니다.
Dave Cross
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.