제9 장 실제 프로그램 관리 (4) - 모듈

4636 단어
모듈
이전에 우 리 는 함수, 클래스 와 데이터 구 조 를 어떻게 사용 하여 코드 를 조직 하 는 지 소 개 했 는데, 다음은 코드 를 조직 하고 확장 하 는 데 사용 되 는 또 다른 메커니즘 인 모듈 을 소개 한다.하나의 모듈 은 파일 패키지 로 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 파일 에 넣 을 수 있 습 니 다. 가장 편안 한 방식 으로 유연 하 게 코드 를 개발 하고 관리 하 며 배치 할 수 있 습 니 다. 물론 그 중의 위험 과 수익 은 자신의 경험 수준 에 달 려 있 습 니 다.
그럼 에 도 불구 하고 우 리 는 코드 양 이 몇 백 줄 을 넘 으 면 모듈 을 사용 하여 코드 를 구성 하 는 것 을 권장 합 니 다.
  • 모듈 은 시스템 의 서로 다른 실체 간 에 논리 적 분 리 를 강제 할 것 이다.
  • OO 를 사용 하 든 안 하 든 모듈 은 API 경 계 를 제공 할 수 있 습 니 다.
  • 모듈 은 자 연 스 러 운 방식 으로 소스 코드 를 구성 하 는 것 을 제창한다.
  • Perl 생태계 에는 창설, 조직, 배치 와 분배 모듈 에 전문 적 으로 사용 되 는 도구 가 많다.
  • 모듈 은 코드 재 활용 체 제 를 제공 했다.

  • 대상 을 대상 으로 하지 않 더 라 도 모듈 은 코드 를 더 잘 밀봉 하 는 데 도움 을 줄 수 있다.
    * * * * 사용 및 가 져 오기 * * * 모듈 을 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 기반 시스템 에 사 용 됩 니 다.

    좋은 웹페이지 즐겨찾기