10분 안에 Perl 배우기
Perl은 텍스트 처리 능력과 유연성으로 유명한 강력한 고수준 프로그래밍 언어입니다. 원래 시스템 관리 작업을 위해 개발되었지만, Perl은 웹 개발, 네트워크 프로그래밍 등 다양한 용도로 사용되는 다재다능한 언어로 발전했습니다. 이 튜토리얼은 Perl의 핵심 개념을 다루어 언어를 빠르게 배울 수 있도록 도와줍니다.
1. 첫 번째 Perl 프로그램 작성하기
간단한 프로그램부터 시작해보겠습니다. hello.pl이라는 파일을 생성하고 다음 코드를 입력하세요:
#!/usr/bin/perl
print "Hello, World!\n";
파일을 저장하고 터미널에서 다음 명령을 실행하세요:
perl hello.pl
출력 결과는 다음과 같습니다:
Hello, World!
이 간단한 프로그램은 Perl의 기본 출력 기능을 보여줍니다. print 함수는 콘솔에 텍스트 정보를 표시하는 데 사용됩니다.
2. 기본 문법
Perl의 문법은 유연하고 표현력이 뛰어나며, 몇 가지 독특한 특징을 가지고 있습니다.
# 이것은 주석입니다
print "Hello, World!\n";
Perl의 기본 문법 규칙:
- 주석: 한 줄 주석은
#으로 시작 - 문장: 세미콜론
;으로 끝남 - Shebang 라인: 스크립트 파일 상단에
#!/usr/bin/perl - 변수: 변수 타입을 나타내는 특수 문자 사용 (
$,@,%) - 문자열 따옴표: 작은따옴표
'또는 큰따옴표"사용 가능
3. 변수와 데이터 타입
Perl에서 변수는 동적으로 타입이 결정되며, 타입을 나타내는 특수 문자를 사용합니다.
스칼라 변수 (단일 값):
$name = "Alice";
$age = 25;
$temperature = 36.5;
$is_active = 1; # 참은 1, 거짓은 빈 문자열
배열 변수 (순서가 있는 목록):
@fruits = ("apple", "banana", "cherry");
@numbers = (1, 2, 3, 4, 5);
해시 변수 (키-값 쌍):
%person = (
"name" => "John",
"age" => 30,
"city" => "New York"
);
3.1 스칼라 변수
스칼라는 문자열, 숫자, 참조와 같은 단일 값을 저장합니다.
# 문자열 연산
$text = "Perl Programming";
print length($text); # 문자열 길이
print uc($text); # 대문자로 변환
print lc($text); # 소문자로 변환
print substr($text, 0, 4); # 부분 문자열 추출
# 숫자 연산
$x = 10;
$y = 3;
print $x + $y; # 13
print $x - $y; # 7
print $x * $y; # 30
print $x / $y; # 3.333...
print $x % $y; # 1 (모듈로)
3.2 배열 변수
배열은 여러 값을 저장할 수 있는 순서가 있는 컬렉션입니다.
@colors = ("red", "green", "blue");
# 배열 요소 접근
print $colors[0]; # "red" (단일 요소는 $ 사용)
print $colors[1]; # "green"
print $colors[-1]; # "blue" (마지막 요소)
# 배열 연산
push(@colors, "yellow"); # 끝에 추가
pop(@colors); # 끝에서 제거
shift(@colors); # 시작에서 제거
unshift(@colors, "purple"); # 시작에 추가
# 배열 함수
print scalar(@colors); # 요소 개수
print $#colors; # 마지막 인덱스
3.3 해시 변수
해시는 키-값 쌍의 컬렉션입니다.
%student = (
name => "Alice",
age => 20,
major => "Computer Science"
);
# 해시 요소 접근
print $student{"name"}; # "Alice"
print $student{age}; # 20
# 해시 연산
$student{"gpa"} = 3.8; # 새로운 키-값 쌍 추가
delete $student{"age"}; # 키-값 쌍 제거
# 해시 함수
@keys = keys %student; # 모든 키 가져오기
@values = values %student; # 모든 값 가져오기
4. 제어 흐름
Perl은 프로그램 실행을 관리하기 위한 여러 제어 흐름 문을 제공합니다.
4.1 if 문
if 문은 조건을 평가하고 조건이 참일 때 블록을 실행합니다.
$age = 20;
if ($age >= 18) {
print "성인\n";
} elsif ($age >= 13) {
print "청소년\n";
} else {
print "어린이\n";
}
# 한 줄 if
print "성인\n" if $age >= 18;
4.2 unless 문
unless는 if의 반대입니다 - 조건이 거짓일 때 실행됩니다.
$age = 15;
unless ($age >= 18) {
print "성인이 아님\n";
}
# 한 줄 unless
print "성인이 아님\n" unless $age >= 18;
4.3 반복문
Perl은 다양한 반복문 구문을 지원합니다.
while 루프:
$count = 0;
while ($count < 5) {
print "카운트: $count\n";
$count++;
}
for 루프:
for ($i = 0; $i < 5; $i++) {
print "i = $i\n";
}
foreach 루프:
@fruits = ("apple", "banana", "cherry");
foreach $fruit (@fruits) {
print "과일: $fruit\n";
}
# 기본 변수 $_ 사용
foreach (@fruits) {
print "과일: $_\n";
}
last와 next:
foreach (1..10) {
last if $_ == 5; # 루프 종료
next if $_ % 2 == 0; # 짝수 건너뛰기
print "$_\n"; # 출력: 1, 3
}
5. 서브루틴
Perl의 서브루틴은 sub 키워드를 사용하여 정의합니다.
기본 서브루틴 정의:
sub greet {
my $name = shift;
return "Hello, $name!";
}
# 서브루틴 호출
$message = greet("John");
print $message;
매개변수 사용:
sub add_numbers {
my ($a, $b) = @_;
return $a + $b;
}
$result = add_numbers(5, 3);
print "합계: $result\n";
기본 매개변수:
sub greet {
my ($name, $greeting) = @_;
$greeting = "Hello" unless defined $greeting;
return "$greeting, $name!";
}
print greet("Alice"); # "Hello, Alice!"
print greet("Bob", "Hi"); # "Hi, Bob!"
6. 정규 표현식
Perl은 강력한 정규 표현식 기능으로 유명합니다.
기본 패턴 매칭:
$text = "Hello, World!";
if ($text =~ /Hello/) {
print "'Hello'를 찾았습니다\n";
}
# 대소문자 구분 없는 매칭
if ($text =~ /world/i) {
print "'world'를 찾았습니다 (대소문자 구분 없음)\n";
}
치환:
$text = "I like cats and cats are cute";
$text =~ s/cats/dogs/g; # 모든 발생 항목 교체
print "$text\n"; # "I like dogs and dogs are cute"
매칭 추출:
$email = "[email protected]";
if ($email =~ /(\w+)@(\w+\.\w+)/) {
print "사용자명: $1\n"; # "user"
print "도메인: $2\n"; # "example.com"
}
7. 파일 작업
Perl은 파일 읽기와 쓰기를 위한 간단한 방법을 제공합니다.
파일 읽기:
# 전체 파일 읽기
open(my $fh, '<', 'example.txt') or die "파일을 열 수 없습니다: $!";
my $content = do { local $/; <$fh> };
close($fh);
print $content;
# 한 줄씩 읽기
open(my $fh, '<', 'example.txt') or die "파일을 열 수 없습니다: $!";
while (my $line = <$fh>) {
print $line;
}
close($fh);
파일 쓰기:
# 파일에 쓰기
open(my $fh, '>', 'output.txt') or die "파일을 열 수 없습니다: $!";
print $fh "Hello, Perl!\n";
close($fh);
# 파일에 추가하기
open(my $fh, '>>', 'output.txt') or die "파일을 열 수 없습니다: $!";
print $fh "새로운 내용을 추가합니다.\n";
close($fh);
8. 내장 함수
Perl은 많은 유용한 내장 함수를 제공합니다.
문자열 함수:
$text = " Perl Programming ";
print length($text); # 문자열 길이
print uc($text); # 대문자로 변환
print lc($text); # 소문자로 변환
print substr($text, 0, 4); # 부분 문자열 추출
print index($text, "Prog"); # 부분 문자열 위치 찾기
배열 함수:
@numbers = (3, 1, 4, 1, 5, 9, 2);
print join(", ", sort @numbers); # "1, 1, 2, 3, 4, 5, 9"
print join(", ", reverse @numbers); # "2, 9, 5, 1, 4, 1, 3"
# 배열 필터링
@filtered = grep { $_ > 3 } @numbers;
print join(", ", @filtered); # "4, 5, 9"
# 배열 변환
@doubled = map { $_ * 2 } @numbers;
print join(", ", @doubled); # "6, 2, 8, 2, 10, 18, 4"
해시 함수:
%person = (name => "Alice", age => 25, city => "New York");
@keys = keys %person; # 모든 키 가져오기
@values = values %person; # 모든 값 가져오기
# 키 존재 여부 확인
if (exists $person{age}) {
print "나이가 존재합니다\n";
}
9. Perl 모듈
Perl은 CPAN을 통해 사용 가능한 풍부한 모듈 생태계를 가지고 있습니다.
코어 모듈 사용:
use strict;
use warnings;
use Data::Dumper;
%data = (name => "Bob", age => 30);
print Dumper(\%data); # 데이터 구조 예쁘게 출력
CPAN 모듈 설치 및 사용:
# CPAN에서 모듈 설치
cpan install JSON
use JSON;
# JSON 파싱
$json_string = '{"name": "Alice", "age": 25}';
$person = decode_json($json_string);
print $person->{name}; # "Alice"
# JSON 생성
$person_hash = { name => "Bob", age => 30 };
$json_output = encode_json($person_hash);
print $json_output; # {"name":"Bob","age":30}
10. Perl 스타일 가이드
Perl은 깨끗하고 읽기 쉬운 코드를 장려하는 커뮤니티 규칙을 가지고 있습니다.
들여쓰기: 들여쓰기에 4개의 공백을 사용하세요.
변수 이름 지정:
- 설명적인 이름 사용
- snake_case 규칙 따르기
- 의미 있는 변수 이름 사용
코드 구성:
- 스크립트 상단에
use strict;와use warnings;사용 my로 변수 선언하여 범위 제한- 의미 있는 서브루틴 이름 사용
문서화:
- 코드 문서화를 위해 POD (Plain Old Documentation) 사용
- 복잡한 로직에 주석 포함
Perl의 유연성과 강력한 텍스트 처리 능력은 시스템 관리, 웹 개발, 데이터 처리 작업에 탁월한 선택입니다. 풍부한 모듈 생태계와 강력한 커뮤니티 지원은 현대 프로그래밍 환경에서도 계속해서 관련성을 유지하고 있습니다.
