Perl-패키지 및 모듈

패키지 란 무엇입니까?

그만큼 package문은 현재 명명 컨텍스트를 지정된 네임 스페이스 (기호 테이블)로 전환합니다. 따라서-

  • 패키지는 자체 네임 스페이스에있는 코드 모음입니다.

  • 네임 스페이스는 고유 한 변수 이름의 명명 된 모음입니다 (심볼 테이블이라고도 함).

  • 네임 스페이스는 패키지 간의 변수 이름 충돌을 방지합니다.

  • 패키지를 사용하면 모듈 자체의 네임 스페이스 외부에서 변수와 함수를 방해하지 않는 모듈을 만들 수 있습니다.

  • 패키지는 다른 패키지 명령문이 호출 될 때까지 또는 현재 블록 또는 파일이 끝날 때까지 유효합니다.

  • 다음을 사용하여 패키지 내의 변수를 명시 적으로 참조 할 수 있습니다. :: 패키지 한정자.

다음은 파일에 main 및 Foo 패키지가있는 예입니다. 여기서 패키지 이름을 인쇄하기 위해 특수 변수 __PACKAGE__가 사용되었습니다.

#!/usr/bin/perl

# This is main package
$i = 1; 
print "Package name : " , __PACKAGE__ , " $i\n"; 

package Foo;
# This is Foo package
$i = 10; 
print "Package name : " , __PACKAGE__ , " $i\n"; 

package main;
# This is again main package
$i = 100; 
print "Package name : " , __PACKAGE__ , " $i\n"; 
print "Package name : " , __PACKAGE__ ,  " $Foo::i\n"; 

1;

위의 코드가 실행되면 다음 결과가 생성됩니다.

Package name : main 1
Package name : Foo 10
Package name : main 100
Package name : main 10

BEGIN 및 END 블록

각각 생성자 및 소멸자 역할을하는 BEGIN 및 END라는 코드 블록을 원하는만큼 정의 할 수 있습니다.

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
  • 마다 BEGIN 블록은 perl 스크립트가로드되고 컴파일 된 후 다른 명령문이 실행되기 전에 실행됩니다.

  • 모든 END 블록은 perl 인터프리터가 종료되기 직전에 실행됩니다.

  • BEGIN 및 END 블록은 Perl 모듈을 만들 때 특히 유용합니다.

다음 예제는 사용법을 보여줍니다-

#!/usr/bin/perl

package Foo;
print "Begin and Block Demo\n";

BEGIN { 
   print "This is BEGIN Block\n" 
}

END { 
   print "This is END Block\n" 
}

1;

위의 코드가 실행되면 다음 결과가 생성됩니다.

This is BEGIN Block
Begin and Block Demo
This is END Block

Perl 모듈이란 무엇입니까?

Perl 모듈은 확장자가 .pm 인 패키지 이름과 이름이 동일한 라이브러리 파일에 정의 된 재사용 가능한 패키지입니다.

Perl 모듈 파일 Foo.pm 다음과 같은 문장이 포함될 수 있습니다.

#!/usr/bin/perl

package Foo;
sub bar { 
   print "Hello $_[0]\n" 
}

sub blat { 
   print "World $_[0]\n" 
}
1;

Perl 모듈에 대한 몇 가지 중요한 사항

  • 기능 requireuse 모듈을로드합니다.

  • 둘 다 검색 경로 목록을 사용합니다. @INC 모듈을 찾습니다.

  • 두 기능 requireuse ~을 부르다 eval 코드를 처리하는 기능.

  • 그만큼 1; 맨 아래에 있으면 eval이 TRUE로 평가되므로 실패하지 않습니다.

Require 함수

모듈은 다음을 호출하여로드 할 수 있습니다. require 다음과 같이 기능-

#!/usr/bin/perl

require Foo;

Foo::bar( "a" );
Foo::blat( "b" );

서브 루틴 이름이이를 호출하려면 완전한 이름이어야한다는 것을 알고 있어야합니다. 서브 루틴을 활성화하는 것이 좋을 것입니다.barblat Foo :: 한정자를 사용할 필요가 없도록 자체 네임 스페이스로 가져올 수 있습니다.

사용 기능

모듈은 다음을 호출하여로드 할 수 있습니다. use 함수.

#!/usr/bin/perl

use Foo;

bar( "a" );
blat( "b" );

패키지의 함수 이름을 완전히 한정 할 필요는 없습니다. 그만큼use 함수는 모듈 내부에 몇 가지 추가 된 명령문이 주어지면 모듈에서 심볼 목록을 내 보냅니다.

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 모듈 트리 만들기

Perl 모듈을 출시 할 준비가되면 Perl 모듈 트리를 만드는 표준 방법이 있습니다. 이것은 사용하여 수행됩니다h2xs유용. 이 유틸리티는 Perl과 함께 제공됩니다. 다음은 h2xs를 사용하는 구문입니다.

$h2xs -AX -n  ModuleName

예를 들어, 모듈이 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

다음은 이러한 옵션에 대한 설명입니다.

  • -A Autoloader 코드를 생략합니다 (자주 사용되지 않는 많은 서브 루틴을 정의하는 모듈에서 가장 잘 사용됨).

  • -X XS 요소를 생략합니다 (eXternal 서브 루틴, 여기서 eXternal은 Perl의 외부, 즉 C).

  • -n 모듈의 이름을 지정합니다.

따라서 위의 명령은 Person 디렉토리 내에 다음 구조를 생성합니다. 실제 결과는 위에 표시됩니다.

  • Changes
  • Makefile.PL
  • MANIFEST (패키지의 모든 파일 목록 포함)
  • README
  • t / (테스트 파일)
  • lib / (실제 소스 코드는 여기에 있습니다

그래서 마침내 tar이 디렉토리 구조를 Person.tar.gz 파일에 저장하면이를 제공 할 수 있습니다. 적절한 지침에 따라 README 파일을 업데이트해야합니다. t 디렉토리에 몇 가지 테스트 예제 파일을 제공 할 수도 있습니다.

Perl 모듈 설치

tar.gz 파일 형식으로 Perl 모듈을 다운로드하십시오. 다음 순서를 사용하여 Perl 모듈을 설치하십시오.Person.pm 로 다운로드되었습니다 Person.tar.gz 파일.

tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install

Perl 인터프리터에는 모듈 (전역 배열 @INC)을 검색하는 디렉토리 목록이 있습니다.