Perl의 각 패키지에는 별도의 기호 테이블이 있으며 정의 구문은 다음과 같습니다.
패키지 mypack;
이 명령문은 mypack 이라는 패키지를 정의합니다. 이후에 정의된 모든 변수 및 서브루틴의 이름은 다른 패키지 명령문을 만날 때까지 패키지와 연관된 기호 테이블에 저장됩니다.
각 기호 테이블에는 고유한 변수 세트와 서브루틴 이름이 있습니다. 각 이름 세트는 서로 관련이 없으므로 동일한 변수 이름을 다른 패키지에서 사용하여 다른 변수를 나타낼 수 있습니다.
하나의 패키지에서 다른 패키지의 변수에 접근하려면 "패키지명 + 이중콜론(::) + 변수명"으로 지정하면 됩니다.
변수와 서브루틴의 이름을 저장하는 기본 기호 테이블은 main 이라는 패키지와 연결되어 있습니다. 프로그램에 다른 패키지가 정의되어 있고 기본 기호 테이블을 사용하도록 다시 전환하려는 경우 기본 패키지를 다시 지정할 수 있습니다.패키지 메인;
이러한 방식으로 다음 프로그램은 패키지가 정의된 적이 없는 것처럼 작동하며 변수 및 서브루틴의 이름은 평소대로 저장됩니다.
다음 예제의 파일은 기본 및 Foo 패키지입니다. 특수 변수 __PACKAGE__ 는 패키지 이름을 출력하는 데 사용됩니다.
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
패키지 이름: main 1 패키지 이름: Foo 10 패키지 이름: main 100 패키지 이름: main 10
Perl 언어는 BEGIN과 END라는 두 가지 키워드를 제공합니다. 여기에는 프로그램 본문이 실행되기 전이나 후에 실행할 스크립트 세트가 포함될 수 있습니다.
구문 형식은 다음과 같습니다.
시작 { ... }끝 { ... }시작 { ... }끝 { ... }
각 BEGIN 모듈은 Perl 스크립트가 로드되고 컴파일된 후 다른 명령문이 실행되기 전에 실행됩니다.
각 END 문 블록은 인터프리터가 종료되기 전에 실행됩니다.
BEGIN 및 END 문 블록은 Perl 모듈을 만들 때 특히 유용합니다.
여전히 이해가 되지 않는다면 다음 예를 살펴보세요.
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
이것은 BEGIN 문 블록입니다. Begin 및 Block 인스턴스는 END 문 블록입니다.
Perl5에서는 Perl 패키지를 사용하여 모듈을 생성합니다.
Perl 모듈은 재사용 가능한 패키지입니다. 모듈 이름은 패키지 이름과 동일하며 정의된 파일의 접미사는 .pm 입니다.
아래에서는 Foo.pm 모듈을 정의합니다. 코드는 다음과 같습니다.
Perl의 모듈에 관해 주의해야 할 몇 가지 사항이 있습니다:
require 및 use 함수는 모듈을 로드합니다.
@INC 는 라이브러리 루틴 위치에 대한 디렉토리 경로를 포함하는 Perl에 내장된 특수 배열입니다.
require 및 use 함수는 eval 함수를 호출하여 코드를 실행합니다.
1이 끝나면 실행은 필수인 TRUE를 반환하고, 그렇지 않으면 오류가 반환됩니다.
아래와 같이 require 함수를 통해 모듈을 호출할 수 있습니다.
use 함수를 통해서도 참조할 수 있습니다:
require 참조는 함수를 지정하기 위해 패키지 이름을 사용해야 하지만 use 참조는 그렇지 않습니다. 둘 사이의 주요 차이점은 다음과 같습니다.
1. require는 모듈이나 perl 프로그램을 로드하는 데 사용됩니다(.pm 접미사는 생략할 수 있지만 .pl은 반드시 있어야 함).
2. Perl use 문은 컴파일 타임에 도입되고 require는 런타임에 도입됩니다.
3. Perl을 사용하면 모듈이 소개될 때 모듈의 하위 모듈도 소개됩니다. 그러나 require는 도입할 수 없으며 다시 선언해야 합니다.
4. 현재 기본 @INC에서 USE를 검색합니다. 모듈이 @INC에 없으면 USE를 사용하여 도입할 수 없지만 require는 경로를 지정할 수 있습니다.
5. USE가 모듈을 참조할 때 모듈 이름에 :: 이중 콜론이 포함되어 있으면 이중 콜론이 경로 구분 기호로 사용됩니다. 이는 Unix에서는 /, Windows에서는 와 동일합니다. 좋다:
MyDirectory::MyModule을 사용하세요.
다음 명령문을 추가하여 사용 모듈에서 목록 기호를 내보낼 수 있습니다.
수출자 필요;@ISA = qw(수출자);
@EXPORT 배열에는 기본적으로 내보낸 변수 및 함수의 이름이 포함됩니다.
package 모듈;require 내보내기;@ISA = qw(Exporter);@EXPORT = qw(bar blat); #기본적으로 내보낸 기호 sub bar { print "Hello $_[0]n" }sub blat { print "World $ _ [0]n" }sub splat { print "Not $_[0]n" } # 내보내지 않음!1;
Perl 배포판과 함께 제공되는 h2xs 도구를 통해 Perl 모듈을 만드는 것은 쉽습니다.
명령줄 모드에서 h2xs를 입력하면 해당 매개변수 목록을 볼 수 있습니다.
h2xs 구문 형식:
$ h2xs -AX -n 모듈 이름
매개변수 설명:
-A는 자동 로드 메커니즘을 무시합니다.
-X XS 요소 무시
-n은 확장 모듈의 이름을 지정합니다.
예를 들어 모듈이 Person.pm 파일에 있는 경우 다음 명령을 사용합니다.
$ h2xs -AX -n 사람
위 프로그램을 실행하면 다음과 같이 출력됩니다.
쓰는 사람/lib/Person.pmWriting 사람/Makefile.PLWriting 사람/READMEWriting 사람/t/Person.tWriting 사람/ChangesWriting 사람/MANIFEST
Person 디렉터리 아래에서 새로 추가된 디렉터리와 파일 설명을 볼 수 있습니다.
README: 이 파일에는 일부 설치 정보, 모듈 종속성, 저작권 정보 등이 포함되어 있습니다.
변경 사항: 이 파일은 프로젝트의 변경 로그 파일 역할을 합니다.
Makefile.PL: 이것은 표준 Perl Makefile 생성자입니다. 모듈을 컴파일하기 위해 Makefile.PL 파일을 생성하는 데 사용됩니다.
MANIFEST: tar.gz 형태의 모듈 버전 배포를 자동으로 빌드하는데 사용되는 파일입니다. 이러한 방식으로 모듈을 CPAN으로 가져와 게시하거나 다른 사람에게 배포할 수 있습니다. 여기에는 이 프로젝트에 있는 모든 파일의 목록이 포함되어 있습니다.
Person.pm: 이것은 mod_perl 핸들러 코드가 포함된 기본 모듈 파일입니다.
Person.t: 이 모듈에 대한 일부 테스트 스크립트입니다. 기본적으로 모듈 로딩만 확인하며, 새로운 테스트 유닛을 추가할 수 있습니다.
t/: 테스트 파일
lib/: 실제 소스코드가 저장되는 디렉토리
tar(Linux의 경우) 명령을 사용하여 위 디렉터리를 Person.tar.gz로 패키징할 수 있습니다.
방금 압축한 Person.tar.gz 파일의 압축을 풀고 설치할 수 있습니다. 단계는 다음과 같습니다.
tar xvfz Person.tar.gzcd Personperl Makefile.PLmakemake 설치
먼저 "perl Makefile.PL"을 실행하여 현재 디렉터리에 Makefile을 생성합니다.
그런 다음 "make"를 실행하여 필요한 라이브러리 파일을 컴파일하고 생성합니다.
그런 다음 "make test"를 사용하여 컴파일 결과가 올바른지 테스트하고 마지막으로 "make install"을 실행하여 라이브러리 파일을 시스템 디렉터리에 설치하면 전체 컴파일 프로세스가 종료됩니다.