🐪 1. 서브루틴이란?
서브루틴(subroutine)은 다른 언어에서 말하는 함수(function) 혹은 메서드(method)와 동일한 개념으로, 특정 작업을 수행하는 코드 블록을 의미합니다. 반복적인 코드를 줄이고, 프로그램을 구조화하며, 재사용성을 높이는데 가장 중요한 도구입니다. 서브루틴을 사용하기 위해서는 sub 키워드를 사용해서 정의할 수 있습니다.
sub 서브루틴 이름 {
# 수행할 코드
}
예를 들어 서 간단한 인사말을 출력하는 서브루틴을 만들 수 있습니다.
sub hello {
print "안녕하세요!"
}
# 서브 루틴 호출
greet();
위 코드를 실행하면 안녕하세요!
가 출력됩니다. 중요한 점은 서브루틴 이름 뒤에 ()
를 붙여서 호출한다는 점이며, Perl에서는 ()
를 생략하고 호출할 수 있으나, 명확성을 위해 붙이는 것을 권장합니다.
🐪 2. 매개변수 전달
서브루틴은 입력 값(매개변수) 를 받을 수 있으며, 전달되는 매개변수는 배열 @_에 저장됩니다. @_ 배열의 각 요소는 서브루틴에 전달된 인자(argument)를 순서대로 나타냅니다.
sub greet_person {
my ($name) = @_; # @_ 배열에 첫 번재 인자를 가져옴
print "Hello, $name!\n";
}
greet_person("철수"); # 출력: Hello, 철수!
greet_person("Jimmy"); # 출력: Hello, Jimmy!
여기서 my ($name) = @_ 이 부분은 @_ 배열에 첫 번째 값을 $name 변수에 저장해 코드안에서 사용할 수 있도록 합니다.
🐪 2-1. 다중 매개변수
서브루틴에 여러 값을 전달할 수 도 있는데, 이떄도 @_ 배열을 사용합니다.
sub add {
my ($a, $b) = @_;
my $sum = $a + $b;
return $sum;
}
my $result = add(5, 7);
print "total = $result\n"; # total == 12
- return 키워드를 사용하면 서브루틴의 결과를 반환(return) 가능
- return 키워드 생략 시 마지막 계산된 값을 반환
sub multiply {
my($a, $b) = @_;
$a * $b; # return 생략
}
print multiply(2,4) # 8
🐪 3. 서브루틴 호출 방식
Perl에서 서브루틴을 호출하는 방법은 여러가지 방법이 있습니다.
🐪 3-1. 일반호출
sub say_hello() {
print "Hell Perl\n"
}
say_hello(); # 일반 호출
say_hello; # () 생략 가능
🐪 3-2. 매개변수 포함 호출
sub print_sum {
my ($x, $y) = @_;
print $x + $y, "\n";
}
print_sum(10, 20); # result: 30
🐪 3-3. 함수처럼 반환값 활용
sub square {
my ($num) = @_;
return $num * $num;
}
my $value = square(0);
print "6의 제곱: $value\n"
🐪 4. 익명 서브루틴(Anonymous Subroutine)
Perl에서는 이름 없는 서브루틴을 만들 수 있습니다. 이를 익명 서브루틴이라 하며 보통 코드 레퍼런스를 만들 때 사용합니다.
my $anon = sub {
my ($name) = @_;
print("Hello, $name\n");
};
$anon->("민수"); # 익명 서브루틴 호출 result: Hello, 민수
- 익명 서브루틴은 변수에 저장되며 -> 연산자를 사용하여 호출
- 주로 콜백(callback) 함수나 배열/해시 구조 내 함수 저장 등에 활용
🐪 5. 서브루틴 내 변수 스코프
서브루틴에서 변수를 선언할 때 my를 사용하면 서브루틴 로컬 변수(local variable)이 됩니다.
sub counter {
my $count = 0;
$count++;
print "현재 카운트: $count\n";
}
counter(); # 현재 카운트: 1
counter(); # 현재 카운트: 1 (로컬 변수라 새로 초기화)
- 반대로 our나 use vars를 사용하면 글로벌 변수(global variable)로 선언
- 로컬 변수를 쓰는 것이 프로그램 유지보수와 버그 방지에 좋음
🐪 6. 서브루틴 선언 위치
Perl은 선언 순서에 따라 다르게 동작합니다. 먼저 선언 후 호출은 일반적이고 안정적입니다.
# Forward Declaration: 선언 전에 호출하고 싶다면 미리 프로토타입(Prototype) 선언
sub jump; # 프로토타입 선언
jump();
sub jump {
print "Jump!!\n";
}
🐪 7 . 실무 팁
- 서브루틴 이름을 의미 있게
- ex. calculate_total, send_email, load_data 등
- 매개변수 개수 고정보다는 유연하게 처리
- @_ 배열을 직접 활용해 가변 인자 처리 가능
- 반복되는 코드를 서브루틴으로 추출
- 유지보수에 용이하고 텍스트 단위 생성 가능
- 익명 서브루틴 활용
- 배열,해시,콜백 함수 또는 이벤트 처리나 비동기 코드에 유용
GitHub - Koras02/Perl-Bloging: https://thinky.tistory.com/category/Back-End/Perl
https://thinky.tistory.com/category/Back-End/Perl. Contribute to Koras02/Perl-Bloging development by creating an account on GitHub.
github.com
'Back-End > Perl' 카테고리의 다른 글
[Perl] 7장 조건문과 반복문 (1) | 2025.08.28 |
---|---|
[Perl] 6장 입출력 함수 (0) | 2025.08.24 |
[Perl] 5장 문자열 처리 기본 (0) | 2025.08.15 |
[Perl] 4장 기본 연산자 (2) | 2025.08.13 |
[Perl] 3장 Perl - 주석과 들여쓰기 (0) | 2025.08.12 |