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