제9 장 실제 프로그램 관리 (4) - 모듈
이전에 우 리 는 함수, 클래스 와 데이터 구 조 를 어떻게 사용 하여 코드 를 조직 하 는 지 소 개 했 는데, 다음은 코드 를 조직 하고 확장 하 는 데 사용 되 는 또 다른 메커니즘 인 모듈 을 소개 한다.하나의 모듈 은 파일 패키지 로 use 나 require 로 불 러 올 수 있 습 니 다.모듈 이 올 바른 Perl 코드 여야 합 니 다.모듈 은 실제 값 으로 끝내 야 Perl 해상도 기 가 모듈 이 성공 적 으로 불 러 오고 컴 파일 되 었 는 지 알 수 있 습 니 다.
모듈 을 불 러 올 때 Perl 은 이중 콜론 분할 모듈 이름 으로 파일 경로 로 변환 합 니 다.예 를 들 어
use StrangeMonkey::Persistence;
Perl 은 @ INC 에서 StrangeMonkey 라 는 디 렉 터 리 를 찾 고 StrangeMonkey 라 는 디 렉 터 리 에서 Persistence. pm 라 는 파일 을 찾 습 니 다 (실제로 StrangeMonkey / persistence. pm 파일 을 찾 습 니 다).use StrangeMonkey::UI::Mobile;
Perl 은 @ INC 에서 StrangeMonkey / UI / Mobile. pm 파일 을 찾 습 니 다.모듈 을 사용 하여 코드 를 구성 하 다
Perl 은 모듈, 가방 또는 이름 공간 을 사용 하도록 강요 하지 않 습 니 다. 모든 코드 를 하나의. pl 파일 이나 여러 개의. pl 파일 에 넣 을 수 있 습 니 다. 가장 편안 한 방식 으로 유연 하 게 코드 를 개발 하고 관리 하 며 배치 할 수 있 습 니 다. 물론 그 중의 위험 과 수익 은 자신의 경험 수준 에 달 려 있 습 니 다.
그럼 에 도 불구 하고 우 리 는 코드 양 이 몇 백 줄 을 넘 으 면 모듈 을 사용 하여 코드 를 구성 하 는 것 을 권장 합 니 다.
대상 을 대상 으로 하지 않 더 라 도 모듈 은 코드 를 더 잘 밀봉 하 는 데 도움 을 줄 수 있다.
* * * * 사용 및 가 져 오기 * * * 모듈 을 use 로 불 러 올 때 Perl 은 디스크 에서 파일 을 불 러 오고 import () 방법 을 호출 합 니 다 (인자 가 있 으 면 파 라 메 터 를 전달 합 니 다).관례 에 따라 한 모듈 의 import () 방법 은 일련의 이름, 내 보 내기 함수 와 다른 기호 표 시 를 자신의 이름 공간 에 가 져 옵 니 다.물론 이것 은 약속 일 뿐 입 니 다. 모듈 은 import () 함수 나 import () 함 수 를 제공 하 는 것 을 거절 할 수도 있 습 니 다. 예 를 들 어 컴 파일 지시 strict 와 같은 역할 은 호출 자의 품사 범위 내 에서 행 위 를 바 꾸 는 것 이지 내 보 내 는 기호 가 아 닙 니 다.
use strict;
# ... calls strict->import()
use CGI ':standard';
# ... calls CGI->import( ':standard' )
use feature qw( say switch );
# ... calls feature->import( qw( say switch ) )
키워드 no 는 모듈 의 unimport () 방법 을 호출 합 니 다.가장 흔히 볼 수 있 는 것 은 import () 를 조합 하여 프로그램의 행동 을 바 꾸 는 것 이다.
use strict;
# no symbolic references or barewords
# variable declaration required
{
no strict 'refs';
# symbolic references allowed
# strict 'subs' and 'vars' still in effect
}
use 와 no 는 컴 파일 할 때 유효 합 니 다:
use Module::Name qw( list of arguments );
#
BEGIN
{
require 'Module/Name.pm';
Module::Name->import( qw( list of arguments ) );
}
유사 한:
no Module::Name qw( list of arguments );
# :
BEGIN
{
require 'Module/Name.pm';
Module::Name->unimport(qw( list of arguments ));
}
다 선택 할 수 있어!모듈 에 import () 나 unimport () 함수 Perl 이 없 으 면 오류 가 발생 하지 않 습 니 다.
비록 BEGIN 블록 이외 에는 아무런 작용 이 없 지만 import () 와 unimport () 함 수 를 직접 호출 할 수 있 습 니 다.컴 파일 이 끝 난 후 import () 와 unimport () 는 아무 소 용이 없습니다.
use 와 require 는 대소 문 자 를 구분 하기 때문에 use strict 와 use Strict 는 다르다. 하 나 는 strict. pm 를 불 러 오 는 것 이 고 하 나 는 Strict. pm 를 불 러 오 는 것 이다.그러나 운영 체제 나 파일 시스템 에 서 는 대소 문 자 를 구분 하지 않 을 수 있 습 니 다. 대소 문 자 를 구분 하지 않 는 파일 시스템 에 대해 서 는 use strict 가 strict. pm 파일 을 찾 지 못 할 때 Perl 은 Strict. pm 를 불 러 옵 니 다. 그러나 Strict - > import () 를 호출 하려 고 할 때 는 아무 일 도 일어나 지 않 기 때문에 대소 문 자 를 조심 하 는 것 이 좋 습 니 다.
* * * * 내 보 내기 * * * 한 모듈 은 자신의 전역 패키지 기 호 를 내 보 낼 수 있 습 니 다. 그러면 다른 가방 은 import () 를 직접 또는 간접 적 으로 호출 하여 이 기 호 를 사용 할 수 있 습 니 다.
핵심 모듈 Exporter 는 기 호 를 내 보 내 는 표준 경로 입 니 다.Exporter 는 2 개의 전역 변수 @ EXPORT 에 의존 합 니 다.OK 와 @ EXPORT 는 내 보 낼 일련의 기 호 를 포함 하고 있 습 니 다.
모듈 StrangeMonkey:: Utilitie 는 몇 개의 단독 함 수 를 제공 합 니 다:
package StrangeMonkey::Utilities;
use Exporter 'import';
our @EXPORT_OK = qw( round translate screech );
...
다른 코드 는 이 모듈 을 사용 하고 이 함수 (round, translate, screech) 를 가 져 올 수 있 습 니 다.변 수 를 내 보 낼 수 있 습 니 다:
push @EXPORT_OK, qw( $spider $saki $squirrel );
@ EXPORT 대신 @ EXPORT 를 사용 할 수도 있 습 니 다.OK. 비슷 한 기능 을 수행 합 니 다.
our @EXPORT = qw( monkey_dance monkey_sleep );
이렇게 하면 어디서 든 use StrangeMonkey:: Utilities 를 사용 하면 이 함수 들 을 가 져 옵 니 다.가 져 올 기 호 를 지정 하면 다른 기 호 를 가 져 오지 않 는 다 는 것 을 알 아야 한다.너 는 네가 원 하 는 것 만 얻 을 수 있 을 것 이다.모듈 을 불 러 오 려 면 어떤 기호 도 가 져 오고 싶 지 않 으 면 명확 한 빈 목록 을 사용 하 십시오.
# make the module available, but import() nothing
use StrangeMonkey::Utilities ();
가 져 오기 목록 을 사용 하지 않 아 도 함 수 를 완전히 제한 하 는 이름 으로 호출 할 수 있 습 니 다. (알 고 있 겠 죠?)
StrangeMonkey::Utilities::screech();
CPAN 모듈 Sub:: Exporter 는 함 수 를 내 보 내기 위해 더 좋 은 인 터 페 이 스 를 제공 합 니 다.CPAN 모듈 Moose:: Exporter 는 Moose 기반 시스템 에 사 용 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.