모듈은 보통 use 키워드로 불러와요.
use를 쓰면 모듈을 불러오는 동시에 그 모듈의 import 메서드를 호출해서, 내보낸 심볼을 모두 가져와요.
패키지의 @EXPORT 배열에 있는 심볼은 기본으로 가져와요.
패키지의 @EXPORT_OK 배열에 있는 심볼은 명시적으로 가져와야 해요.
심볼을 가져오려면 먼저 그 심볼을 내보내야 해요. Exporter 모듈은 Perl에 기본으로 포함되어 있고, 내보내기에 가장 편리한 방법 중 하나예요.
모듈을 정의하는 방법:
package Foo;
use Exporter ('import');
our @EXPORT_OK = ('bar');
sub bar { ... }
모듈을 사용하는 방법:
use Foo ('bar');
bar();
Exporter 외에도 Perl에는 사용할 수 있는 다양한 코어 모듈이 있어요. 여기에서 만날 수 있는 연습 문제에 유용한 예로는 List::Util, Time::Piece, Math::BigRat 등이 있어요.
코어 모듈 외에도 CPAN에는 Perl 커뮤니티가 만든 수천 개의 추가 모듈이 있어서 설치해서 쓸 수 있어요. Perl 트랙은 cpanfile을 사용해서 Exercism의 Perl 테스트 러너에서 쓸 수 있는 모듈을 설치해요.
이번 연습 문제에서는 미용실 예약 스케줄러를 만들어 봐요.
과제는 세 가지이고, 모두 예약 날짜를 다뤄요.
appointment_has_passed 서브루틴을 구현해요. 이 서브루틴은 날짜 문자열을 받아서 예약이 과거에 있었는지 확인해요:
appointment_has_passed("2019-07-25T13:45:00")
// => true
날짜 문자열은 ISO 8601 날짜 및 시간 형식인 YYYY-mm-ddTHH:MM:SS로 전달돼요.
비공개 서브루틴 _parse_datetime도 구현해야 해요.
몇 가지 모듈을 추천해요:
is_afternoon_appointment 함수를 구현해요. 이 함수는 날짜 문자열을 받아서 예약이 오후(12:00 이상, 18:00 미만)인지 확인해요:
is_afternoon_appointment("2019-07-25T13:45:00")
// => true
describe_appointment 함수를 구현해요. 이 함수는 날짜 문자열을 받아서 그 날짜와 시간에 대한 설명을 반환해요:
describe_appointment("2019-07-25T13:45:00")
// => "You have an appointment on 07/25/2019 1:45 PM"
참고로 시간은 0-12 범위이고, 앞에 0이나 공백이 붙지 않아요.