날짜: 1996-03-15 | 글쓴이: 도아 | 5904 번 | 프린트 | 메일로보내기

펄을 배우자 - 제 12강 서브루틴


다른 우수한 프로그래밍 언어처럼 펄도 사용자가 , 서브루틴이라 부르는 자신의 함수를 정의할 수 있게 해준다. 이들은 프로그램 어디에 위치해도되지만 프로그램의 시작부분이나 끝부분에 두는 것이 아마 최선일 것이다. 서브루틴은 전달 해주어야하는 매개변수와 무관하게 다음과 같은 형식을 갖는다.
sub mysubroutine
{
	print "그리 흥미있는 루틴은 아니군.\n";
	print "하지만 매번 같은 일을 하지.\n";
}
다음의 것 모두 이 서브루틴을 호출하는데 사용된다. 서브루틴은 서브루틴의 이름 앞에 &를 붙여 호출하는 것에 주의한다.
&mysubroutine;		# 서브루틴 호출
&mysubroutine($_);	# 매개변수로 서브루틴 호출
&mysubroutine(1+2, $_);	# 두개의 매개변수로 서브루틴 호출
매개변수 위의 경우에 매개변수는 받아들일 수 있지만 무시된다. 서브루틴을 호출할 때 매개변수는 @_라는 배열내의 목록으로 전달된다. 이 변수는 절대로 스칼라 변수 $_와는 무관하다. 다음 서브루틴은 서브루틴을 호출할때 전달한 매개변수만 출력하는 서브루틴이다. 또한 이 서브루틴을 호출하는 두개의 예가 이어져 있다.
sub printargs
{
	print "@_\n";
}

&printargs("바보", "영기");	# "바보 영기"를 출력
&printargs("개구리", "왕눈이", "투투"); # "개구리 왕눈이 투투"를 출력
다른 일반배열과 마찬가지로 @_의 각 요소는 대괄호에의해 참조할 수 있다.
sub printfirsttwo
{
	print "첫번째 인자는 $_[0]이다.\n";
	print "그리고 $_[1]는 두번째 인자이다.\n";
}
다시 강조하자면 참조된 스칼라 $_[0], $_[1]등은 $_와는 전혀 무관하므로 충돌을 걱정필요는 없다. 값의 리턴 서브루틴의 결과는 항상 마지막으로 평가된 값이다. 이 서브루틴은 두개의 입력 매개변수중 큰 값을 리턴한다. 이 것의 예는 다음과 같다:
sub maximum
{
	if ($_[0] > $_[1])
	{
		$_[0];
	}
	else
	{
		$_[1];
	}
}

$biggest = &maximum(37, 24);	# 이제 $biggest은 37이다.
위의 &printfirsttwo 서브루틴도 임의의 값을 리턴한다. 이 경우에는 1을 리턴한다. 이 것은 서브루틴이 print문을 수행하고 print에 성공하면 결과는 항상 1이기 때문이다. 지역변수 @_ 변수는 현재 서브루틴에서만 사용되는 지역변수이다. 물론 $_[0], $_[1], $_[2]등도 지역변수이다. 다른 변수 역시 지역변수가 될 수 있으며, 입력 매개변수를 변경하려는 경우 아주 유용하다. 다음 서브루틴은 한개의 문자열이 다른 문자열내에 있는지를 조사하는 프로그램이다(공백은 제거). 예는 다음과 같다.
sub inside
{
	local($a, $b);			# 지역변수 선언
	($a, $b) = ($_[0], $_[1]);	# 값 할당
	$a =~ s/ //g;			# 지역변수에서 공백 제거
	$b =~ s/ //g;			
	($a =~ /$b/ || $b =~ /$a/);	# $a내에 $b가 있거나
					# $b내에 $a가 있는가?
}

&inside("이게 책 임감?", "책임감");		# 참
처음 두행은 다음과 같이 교체함으로서 보다 깔끔하게 만들 수 있다.
local($a, $b) = ($_[0], $_[1]);


다음글: 펄 - 목차 (7455)1996-04-01
이전글: 펄을 배우자 - 제 11강 연관배열 (6327)1996-03-14

세상사는 이야기

  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >
  • 탈옥의 필수, QuickDo >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.