# 모듈

PERL의 모듈은 확장자로 __.pm__을 사용합니다.

모듈은 *package* 선언으로 시작됩니다.

```perl
package MyTest;
# MyTest.pm
use warnings;
use strict;

my $var = 1;

sub say_hello {
    return "Hello";
}
1;
```

스크립트에서 다른 모듈을 사용하려면 `use`등을 사용해서 사용하려는 모듈을 선언해야 합니다.

```perl
#!/usr/bin/perl
use warnings;
use strict;
use lib '/home/elex/Workspace/perl-examples'; # @INC에 모듈의 경로를 알려주기 위해 사용되었습니다.
use MyTest; # 사용할 모듈을 불러온 다음,

$a = MyTest::say_hello(); # 모듈의 서브루틴을 호출합니다.

print "$a\n";
```

- do

  `@INC`에 정의된 경로에서 모듈 파일을 찾고, 찾은 모듈을 삽입합니다.

- require

  모듈을 한 번만 불러옵니다. 모듈을 찾지 못하면 오류가 표시됩니다.

- use

  require와 비슷하지만, 프로그램 실행 전에 모듈을 불러옵니다. 대부분의 경우, use가 사용됩니다.


## BEGIN 블록과 END 블록

BEGIN 블록은 스크립트가 로딩된 직후에 다른 실행문이 실행되기 이전에 실행됩니다. END 블록은 스크립트가 실행을 마친 직후에 실행됩니다.

```perl
#!/usr/bin/perl
use strict;

package Foo;

sub hello {
    print 'Hello.';
}
BEGIN {
    print 'Begin..';
}
END {
    print '..End.';
}
1;
```