자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[Perl] 8장 함수와 서브루틴 - 서브루틴 선언과 호출

728x90

🐪 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

 

 

728x90
LIST

'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