서브루틴이 없는 프로그래밍 언어는 무엇인가 ? 펄에서 서브루틴의 정의는 다음과 같은 형식을 취한다:
sub NAME {
STATEMENTS;
}
- C와 달리 서브루틴은 형식을 지정하지 않는다. 모든 서브루틴은 매개변수로서 리스트를 취한다. 서브루틴은 리스트나 스칼라 값을 리턴할 수 있다.
- 파스칼과 달리 서브루틴내 서브루틴을 둘 수 없다. 사실 서브루틴들은 다른 서브루틴 블럭을 제외한 임의의 위치에서 정의될 수 있다. 이 것은 아래에서 사용될 것이다.
- 포트란과 달리 서브루틴과 함수사이의 구분이 존재하지 않는다. 앞으로 서브루틴의 사용을 고수하겠지만 용어는 서로 혼용할 것이다.
- 서브루틴의 매개변수는 특수 배열 @_을 통해 전달된다.
- 이제 변수의 사용범위를 고려하자.
- 이 문서의 목적상 모든 변수는 전역변수로 고려할 것이다.
- 재귀 호출도 가능하지만 이 문서의 목적에 벗어나는 것이다.
펄내에서 서브루틴은 내장된 서브루틴과 다른 방법으로 호출된다.
&NAME(arg1,arg2,etc);
# - 또는 - (다음처럼 어떠한 매개변수도 취하지 않는다.
&NAME;
# 리턴 값은 다른 임의의 값과 마찬가지로 사용된다.
$loudestInstrument = &measureLoudest(@allInstruments);
예
# error이라는 서브루틴을 정의한다.
sub error {
($message) = @_;
print("ERROR:",
$message,
"<p>도움을 받기 원하면 이전 페이지의 저자에게 연락하기 바란다.\n");
exit(0);
}
if ( ! $recipient ) {
# 폼이 해당되는 필드를 갖고 있지 않다.
# 적당한 오류메시지를 출력한다.
&error("회신 주소가 빠졌습니다.");
}
서브루틴의 정의는 프로그램의 흐름에 어떠한 영향도 미치지 않는 다는 것을 주의하기 바란다.