2016-10-20 2 views
6

매우 기본적인 질문은 유감 스럽지만 Perl의 초급 단계이므로이 질문에 대한 적절한 설명을 찾을 수 없습니다. 몇 가지 예를 작성하고이를 해독하려고 시도하지만 실제로 전문가의 지식을 사용할 수 있음을 알고 있습니다.사용 설명문이 포함 된 qw (: const) 사용

나는 개발자가 사용하는 라이브러리를 공급 한 일부 코드를 통해거야 :

use libExample qw(:const) 

을 지금은이 libExample에서 상수를 소싱을 의미하지만, 정말이 어떻게 작동하는지 알고 싶습니다 이해하는 것과.

  1. 이유는 간단하게 말할 수 없다 : use libExample qw(const)

  2. 언급이 라이브러리를 사용하는 다른 개발자를 만들기 위해 우리가/libExample.pm 그 자체로 작성해야 할 일이 있나요 (:의 관련성을 이해하려고 노력) const 대신에 그러한 옵션들이있다.

고마워요!

+0

시도

package Foo; use Exporter; our %EXPORT_TAGS = ( working_days => [ qw(monday tuesday wednesday thursday friday) ], weekend_days => [ qw(saturday sunday) ] ); # ... 

우리는 하나 개의 태그 대신 다섯 함수 이름으로 사용할 수 있습니다 this : http://perldoc.perl.org/Exporter.html – rubikonx9

+0

@ rubikonx9 : 좀 더 자세히 설명하고 답을 써야합니다. –

답변

6
use libExample qw(:const) 

$EXPORT_TAGS{const} 익명 어레이의 모든 이름을 선택하고 현재 네임 스페이스로 가져옵니다.

use libExample qw(const) 

반면 CONST를 선택하고 현재 네임 스페이스를 가져옵니다.

은 다른 변종이 있습니다

[!]name   This name only 
[!]:DEFAULT  All names in @EXPORT 
[!]:tag   All names in $EXPORT_TAGS{tag} anonymous array 
[!]/pattern/ All names in @EXPORT and @EXPORT_OK which match 

이 주제에 대한 자세한 내용은 Exporter 문서를 통해 이동하시기 바랍니다.

+0

simbabque는 모든 사람들이 읽어야한다고 제안한 세부 사항을 다루었지만이 내용을보다 정확하고 설명 할 때 대답으로 받아 들였습니다. 요점은 즉각적으로 내가 가진 의구심을 해소했습니다. –

8

구문 use Foo qw(:const)Exporter의 EXPORT_TAGS 기능을 사용합니다.

라이브러리 모듈을 설정할 때 일반적으로 많은 함수 또는 클래스 변수가 있습니다. 그런 다음 기본적으로 내보낼 대상을 지정하여 내보내기를 구성합니다.

package Foo; 
use Exporter; 

our @EXPORT = qw(frobnicate); 

sub frobnicate { ... } 

또는 요청시.

OUR @EXPORT_OK = qw(frobnicate barnicate); 

sub barnicate { ... } 

그러나 라이브러리의 사용자가 모든 방법을 나열 할 필요가 없도록 함께 그룹화하도록 지정할 수도 있습니다. 이 예제를 고려하십시오. 나는 모든 일 원한다면

package Foo; 
use Exporter; 

our @EXPORT_OK qw(monday tuesday wednesday thursday friday saturday sunday); 

sub monday { ... } 
sub tuesday { ... } 
sub wednesday { ... } 
sub thursday { ... } 
sub friday { ... } 
sub saturday { ... } 
sub sunday { ... } 

는 지금, 나는이 작업을 수행해야 할 것 : 하나 개의 긴 라인의

use Foo qw(monday tuesday wednesday thursday friday); 

. 대신 그룹으로 묶을 수 있다면 매우 유용 할 것입니다. 음, 그럴 수 있습니다.대신 라이브러리에이 작업을 수행 할 경우이 같다고

use Foo qw(:working_days); 

참고 :

use Foo ':working_days';