Perl 치트시트 — 간결한 참고서
Perl 5.38 문법, 정규식, 레퍼런스와 가장 자주 쓰는 내장 함수 치트 시트로, 일상 작업의 약 80%를 다룸.
Perl Perl 5.38
perl 5 (interpreter) · 다중 패러다임(절차형 · OO · 함수형) · 동적
추천 학습 경로
먼저 perl hello.pl 실행과 use strict/warnings 익히기 → 스칼라, 배열, 해시와 흐름 제어 익히기 → 서브루틴과 컨텍스트 깊이 파기 → 레퍼런스로 복잡한 자료구조 만들기 → 정규식으로 텍스트 처리 → eval 오류 처리와 bless 객체 지향 이해 → 필요에 따라 스레드, 네트워크, 시간과 CPAN 모듈 학습. FAQ 절은 돌아와서 실수 피하기 좋다.
1.Hello World 및 빌드 환경
Perl 스크립트 실행, use strict/warnings 및 명령줄 도구.
최소 프로그램
hello.pl로 저장하고 perl hello.pl로 실행. use strict와 use warnings는 필수.
실행과 인터프리터
perl은 스크립트를 직접 해석하여 실행; -c는 문법 검사만, -e는 한 줄 코드를 실행.
shebang와 인자
#!/usr/bin/perl은 인터프리터 선언; 명령줄 인자는 @ARGV에 저장, $0은 스크립트 이름.
출력과 서식 지정
print는 줄바꿈 없음, say는 자동 줄바꿈; printf는 서식 지정, sprintf는 문자열 반환.
입력 읽기
<STDIN>은 한 줄을 읽음(줄바꿈 포함); chomp는 끝의 줄바꿈 제거; EOF는 undef 반환.
따옴표 연산자
q()는 작은따옴표 의미, qq()는 큰따옴표 의미, qw()는 단어 목록, qx()는 명령 대체.
use strict/warnings
use strict는 변수 선언을 강제하고 bareword를 금지; use warnings는 런타임 경고를 활성화. 현대 Perl의 필수.
perldoc 문서
perldoc은 Perl과 함께 설치되어 함수, 모듈, 내장 변수, 언어 튜토리얼을 조회.
2.변수와 상수
스칼라/배열/해시 선언, my/our/local/state와 상수 정의.
변수 선언
세 기호가 세 가지 컨테이너를 표시: $ 스칼라, @ 배열, % 해시. my는 어휘 변수 선언.
스칼라 타입
스칼라는 숫자, 문자열, 참조 등 하나의 값을 저장. 문자열과 숫자는 자동 변환.
배열 조작
배열은 요소의 목록. push/pop은 끝을 조작, shift/unshift는 시작을 조작, 인덱스는 0부터.
해시 조작
해시는 키-값 쌍이며 키는 문자열. keys/values/each로 순회, exists/delete로 관리.
상수 정의
use constant는 컴파일 타임 상수를 정의, 기호 없이 서브루틴처럼 호출.
스코프
my 어휘 변수는 블록 내에서 보임; our 패키지 변수는 전역; local은 전역을 임시로 덮음; state는 정적 어휘.
기본 변수
$_는 기본 입력 변수, @_는 인자 목록; $!는 시스템 오류, $0은 스크립트 이름 등 특수 변수가 자주 사용됨.
문자열 보간
큰따옴표에서 $scalar와 @array가 보간됨; 작은따옴표는 그대로 출력; 중괄호는 변수 경계를 한정.
3.데이터 타입
스칼라, undef, 참/거짓, 리스트와 해시, 파일 핸들과 typeglob.
스칼라 타입
스칼라는 유일한 기본 타입이며 정수, 부동소수점, 문자열, 참조를 저장할 수 있음. 타입을 명시적으로 선언할 필요 없음.
숫자 문자열 상호 변환
컨텍스트에 따라 자동 변환: +는 수치, .은 연결. 명시적 변환은 +0과 ."" 사용.
undef와 defined
undef는 미정의를 나타내며 수치 컨텍스트에서 0, 문자열 컨텍스트에서 빈 문자열. defined로 판단.
불리언 참/거짓
거짓 값은 undef, 0, "0", 빈 문자열뿐; 나머지는 모두 참. 논리 연산자는 피연산자를 반환.
배열과 리스트
리스트 리터럴 (1,2,3), qw 단어 목록, 범위 1..5. 컨텍스트가 전체 또는 요소를 결정.
해시 키-값 쌍
뚱뚱한 화살표 =>는 왼쪽에 자동으로 따옴표를 붙임; 키-값이 쌍으로 나타나며 키는 문자열 또는 정수.
파일 핸들
STDIN/STDOUT/STDERR은 내장 핸들; open 어휘 핸들로 파일을 읽고 쓰며, 세 인자 형태가 가장 안전.
typeglob
* 접두사는 심볼 테이블 항목을 나타내며 스칼라/배열/서브루틴에 별칭을 부여. 모던 코드에서는 잘 쓰이지 않음.
4.참조와 역참조
Perl은 참조로 포인터를 대체: 역슬래시로 주소 획득, 역참조, 화살표 연산, 중첩 구조.
참조 기본
역슬래시 \는 변수에 대한 참조를 가져와 참조 타입의 스칼라를 반환; ref 함수는 타입명을 반환.
역참조
@$ref, %$ref, $$ref는 참조를 해당 타입으로 복원; 중괄호 형태 ${$ref}가 더 명확.
화살표 연산자
->는 중첩 구조를 역참조: $ref->[0]와 $ref->{key}, 단계별로 연결.
익명 참조
[] 익명 배열, {} 익명 해시, sub {} 익명 함수; 명명된 변수 없이 직접 구성.
중첩 구조
배열 안에 해시, 해시 안에 배열 등 복합 구조; 순회할 때 단계별로 역참조.
참조로 인자 전달
참조 전달로 큰 배열 복사를 피하고 호출자 데이터를 제자리에서 수정; 함수가 참조를 반환하면 더 효율적.
bless와 객체
bless는 참조에 클래스 태그를 붙여 객체로 만듦; 이후 ref는 클래스명을 반환. 객체는 본질적으로 참조.
참조 비교
참조 주소 비교에는 == 사용; ref로 타입 판단; 참조 카운팅이 생명 주기를 관리.
5.흐름 제어
if/unless, 접미사 형식, for/foreach/while과 next/last/redo.
if/elsif/else
if는 참/거짓을 판단; elsif는 연쇄; unless는 역 판단. 조건에 괄호는 필요 없음.
unless와 until
unless는 if의 부정, until은 while의 부정; do-until은 최소 한 번 실행.
접미사 제어
if/unless/for/while은 단일 문장 뒤에 올 수 있으며 Perl의 관용구. 한 문장만 수정.
for/foreach 루프
for는 C 스타일 또는 리스트 순회로 작성 가능; foreach는 별칭. 변수 미지정 시 $_ 사용.
while 루프
while은 조건이 참인 동안 실행; 파일 읽기는 while로 한 줄씩 읽는 것이 가장 관용적; do-while은 먼저 한 번 실행.
next/last/redo
next는 현재 회차 건너뜀, last는 루프 종료, redo는 현재 회차 재실행; 레이블로 중첩 루프 제어.
삼항 연산과 단락 평가
?:는 조건 표현식; ||와 //는 기본값 제공; 논리 연산은 피연산자를 반환.
goto와 레이블
goto로 이동하는 레이블(제한 버전); 다중 루프 탈출은 라벨이 붙은 last를 우선 사용한다. 일상 코드에서는 goto를 거의 쓰지 않는다.
6.함수와 서브루틴
sub 정의, @_ 매개변수, 반환값, 클로저, 프로토타입과 시그니처.
함수 정의
sub은 명명된 서브루틴을 정의하며, 마지막 표현식이 자동으로 반환된다. 호출 시 괄호로 인자를 전달한다.
@_와 매개변수
매개변수 목록은 @_에 저장된다; shift는 첫 번째 값을 꺼낸다; @_의 원소는 별칭이므로 제자리에서 수정하면 외부로 새어나간다.
반환값
스칼라 또는 리스트 반환은 문맥에 따라 결정된다; wantarray는 호출 문맥을 판별한다; 참조를 반환하면 복사를 피할 수 있다.
익명 서브루틴
sub {}는 함수 참조를 생성하며, ->()로 호출한다; 콜백, 배열·해시 저장에 사용한다.
클로저
클로저는 어휘 변수를 캡처하여 상태를 기억한다; 팩토리 함수를 호출할 때마다 독립적인 복사본이 만들어진다.
프로토타입
프로토타입은 컴파일 시점에 매개변수 문맥을 제약한다(예: (\@)는 배열 참조를 강제). 현대 코드에서는 시그니처 사용을 권장한다.
함수 시그니처
feature 'signatures'는 선언적 매개변수를 제공한다(5.36+ 안정); 기본값과 배열 매개변수를 지원한다.
함수 참조
\&sub는 함수 참조를 가져오고, ->() 또는 &$ref()로 호출한다; 콜백, 디스패치 테이블, 고차 함수에 사용한다.
7.문자열
따옴표, 보간, 연결, 포맷, 부분 문자열, 인코딩 처리.
문자열 리터럴
작은따옴표는 그대로, 큰따옴표는 보간; q()/qq()는 동등; 인접한 문자열은 자동으로 연결된다.
보간 규칙
큰따옴표 안에서 $scalar와 @array가 보간된다; 중괄호로 경계를 제한; 인덱싱·역참조도 보간할 수 있다.
연결과 반복
.은 문자열 연결, x는 반복, join은 배열 연결; length는 길이, reverse는 역순.
부분 문자열과 검색
substr은 부분 문자열을 가져오거나 변경; index/rindex는 위치를 찾는다(찾지 못하면 -1 반환).
chomp와 split
chomp는 끝의 개행을 제거; split은 구분자로 리스트를 분리; join은 그 역연산이다.
printf/sprintf
printf는 직접 출력하고, sprintf는 문자열을 반환; %d/%s/%f 등의 포맷과 0 채우기·정렬.
대소문자와 정제
uc/lc/ucfirst로 대소문자를 변경; 치환 정규식으로 공백 제거; tr///로 문자 변환.
인코딩과 UTF-8
use utf8로 소스를 표시; encode/decode로 변환; 인코딩 레이어를 사용해 파일을 읽고 쓴다.
8.집합과 자료구조
배열/해시 조작, 슬라이스, map/grep, 정렬과 List::Util.
배열 추가·삭제·수정
push/pop/shift/unshift 네 가지 끝점 조작; splice로 중간 삽입·삭제; reverse/sort.
슬라이스
@arr[...]는 배열 슬라이스, %hash{...}는 해시 슬라이스; 슬라이스는 한꺼번에 대입할 수 있다.
리스트 연산
sum/min/max는 List::Util에서 제공; grep으로 중복 제거, 범위에서 값 가져오기, 리스트 구조분해.
map과 grep
grep은 필터링, map은 변환이며 둘 다 $_로 반복한다. 스칼라 문맥에서 grep은 일치 개수를 반환한다.
해시 순회
keys/values는 키·값 리스트를 가져오고, each는 키-값 쌍을 순회; exists/delete로 관리.
해시 관용구
해시는 카운팅, 중복 제거, 집합, 캐시, 그룹화에 사용. 순회 중 추가·삭제는 주의해야 한다.
정렬
sort의 기본은 문자열 순서; 사용자 정의 비교 블록은 <=>로 숫자, cmp로 문자열을 비교한다.
List::Util
sum/sum0/min/max/first/reduce/any/all/shuffle. sum0은 빈 리스트에서 0을 반환.
9.메모리와 성능
참조 카운팅, 순환 참조, 약한 참조, 자동 활성화, 성능 벤치마크.
참조 카운팅
Perl은 참조 카운팅으로 메모리를 자동 회수하므로 수동 free가 필요 없다. 카운트가 0이 되면 해제된다.
순환 참조
객체가 서로를 참조하면 카운트가 0이 되지 않아 누수가 발생; 약한 참조를 사용하거나 수동으로 순환을 끊는다.
약한 참조
Scalar::Util::weaken은 참조가 카운트를 증가시키지 않게 한다; 대상이 회수되면 약한 참조는 undef가 된다.
스코프 해제
어휘 변수와 핸들은 스코프를 벗어날 때 자동으로 해제·닫힌다; undef로 미리 해제할 수 있다.
자동 활성화
정의되지 않은 참조에 값을 대입하면 컨테이너가 자동으로 생성된다; 쓰기는 편하지만 중첩 읽기 시 잘못 생성될 수 있다.
할당과 속도 향상
배열 사전 할당, 정규식 사전 컴파일, 보간 연결은 최소화; 측정 후 최적화.
메모리 측정
Devel::Size로 구조 점유 측정; 메모리 피크 관찰; 대용량 파일은 스트리밍 처리.
성능 벤치마크
Benchmark 모듈로 구현을 비교; Time::HiRes로 고정밀 타이밍.
10.객체 지향
bless 참조, 메서드, 상속, 접근자, 연산자 오버로딩과 Moose/Moo.
bless 생성
bless는 참조에 클래스 태그를 붙여 객체로 만든다; 객체는 본질적으로 클래스 이름이 붙은 참조이다.
메서드와 호출
->의 왼쪽은 객체, 오른쪽은 메서드; 메서드의 첫 번째 매개변수는 $self이다.
상속
use parent로 부모 클래스를 선언; 자식 클래스는 동일 이름 메서드를 오버라이드; 부모 클래스 메서드를 재사용할 수 있다.
생성자
new는 클래스 이름과 인자를 받아 bless 객체를 반환; 다양한 생성 방식을 제공할 수 있다.
캡슐화와 접근자
필드 접근을 메서드로 캡슐화하고, 접근자에 검증을 추가; 외부에서 직접 필드를 변경하지 못하게 한다.
연산자 오버로딩
use overload로 +, "" 등의 연산자를 정의; 객체가 숫자·문자열처럼 연산에 참여하도록 한다.
Moo/Moose
Moo 경량 객체 시스템: has로 필드 선언, 접근자 자동 생성, extends로 상속.
역할과 조합
Moo::Role은 재사용 가능한 메서드 집합을 정의하며, with로 도입한다; 조합이 상속보다 낫다.
11.오류 처리
die/warn, eval 캐치, Try::Tiny, Carp, 그리고 사용자 정의 예외.
die와 warn
warn은 경고를 출력하고 종료하지 않는다; die는 출력하고 종료한다; die는 문자열이나 객체를 던질 수 있다.
eval 캐치
eval BLOCK은 예외를 캐치하여, 오류 시 $@에 저장한다; 성공하면 블록 내 마지막 표현식을 반환한다.
$@ 처리
$@는 최근 오류를 저장한다; 문자열을 매칭하거나 객체 타입을 검사할 수 있다; undef와 예외를 구분한다.
Try::Tiny
try/catch/finally 구조가 명확하며, $_가 오류를 담는다; $@ 경합 문제를 해결한다.
Carp 보고
croak/carp는 호출자 위치를 보고한다; confess/cluck는 스택을 포함한다. 라이브러리 코드에 더 친화적이다.
사용자 정의 예외
객체를 die로 던지고 ref/isa로 판단한다; ""를 오버로드하여 문자열 변환을 친화적으로 만든다.
autodie
autodie는 open 등 시스템 호출 실패 시 자동으로 die 처리하여, 직접 or die를 쓸 필요가 없게 한다.
오류 처리 패턴
or die 관용구, 사전 검증, 실패 시 조기 반환; 최상위에서는 die, 라이브러리 내부에서는 반환.
12.파일 I/O
open 읽기/쓰기, 다이아몬드 연산자, slurp, 인코딩, 경로, 그리고 JSON.
열기와 읽기
세 인수 open으로 파일을 읽으며, 줄 단위 while이 메모리를 가장 적게 사용한다; -e/-f로 파일 속성을 판단한다.
쓰기와 추가
>는 덮어쓰기, >>는 추가 쓰기; print/printf로 핸들에 쓴다; umask로 권한을 제어한다.
다이아몬드 연산자
<>는 인수 파일을 읽고, 인수 없이는 STDIN을 읽는다; $.는 누적 줄 번호, $ARGV는 현재 파일명이다.
전체 파일 읽기
local $/를 undef로 두면 한 번에 읽는다; File::Slurper는 read_text 편의 함수를 제공한다.
binmode와 인코딩
binmode는 이진 안전이다; <:utf8 레이어로 UTF-8을 읽고 쓴다; raw는 인코딩 레이어를 제거한다.
표준 핸들
STDIN/STDOUT/STDERR; 핸들 복제, 터미널 판단, 즉시 플러시.
경로 작업
Cwd는 현재 디렉터리, File::Spec는 크로스 플랫폼 결합, glob은 파일 매칭, File::Find는 재귀.
JSON 처리
JSON::PP는 코어 모듈이다: encode/decode, 미화, UTF-8. 운영 환경에서는 JSON::XS를 사용 가능하다.
13.흔한 오해
Perl 일상 개발에서 가장 자주 빠지는 함정과 올바른 작성법.
use strict 잊기
strict를 활성화하지 않으면 오타가 조용히 넘어가고 변수가 자동으로 전역화된다. strict는 안전의 최저선이다.
컨텍스트 혼동
스칼라와 리스트 컨텍스트의 결과가 다르다: 배열은 스칼라 컨텍스트에서 길이를 반환한다. scalar로 명시한다.
chomp 잊기
<STDIN>은 개행을 포함하며, chomp를 빠뜨리면 문자열 비교가 영원히 실패한다.
비교 연산자 혼용
==은 수치 비교, eq는 문자열 비교. 잘못 쓰면 "10"과 "010"을 같다고 판단한다.
해시 순회 무질서
해시 내부 순서는 정해져 있지 않으며, 순회에 의존하면 무작위로 오류가 발생한다. 순서가 필요하면 키를 정렬한다.
읽기 시 autovivification
중첩 구조를 읽을 때 중간 참조가 자동으로 생성되어 메모리가 조용히 증가한다. 단락 평가로 빈 값 판정을 하면 피할 수 있다.
local과 my 혼동
local은 전역 변수를 일시적으로 덮어쓰며(블록 밖에서 복원), my가 어휘적 지역 변수이다.
open 작성법 구식
두 인수 open + bareword 핸들은 심볼 테이블을 오염시키고 안전하지 않다. 세 인수 + 어휘 핸들을 사용한다.
배열과 스칼라 컨텍스트
배열은 스칼라 컨텍스트에서 길이를 반환하고, 리스트는 마지막 항목을 반환한다. 길이는 scalar를 사용한다.
14.멀티스레드
threads는 스레드를 생성하고, threads::shared는 데이터를 공유하며, 락과 큐로 동기화한다.
스레드 생성
threads->create는 새 스레드를 시작한다; join은 종료를 기다리고 반환값을 가져온다.
join과 오류
join은 스레드 결과를 반환한다; 스레드 내 die는 메인 스레드로 전파되며, eval로 캐치할 수 있다.
공유 데이터
threads::shared의 :shared 변수는 스레드 간 공유된다; 일반 my 변수는 각 스레드의 복사본이다.
락과 세마포어
lock은 임계 영역을 보호한다; Thread::Semaphore는 흐름을 제한한다. 락은 스코프 종료 시 자동 해제된다.
스레드 큐
Thread::Queue는 스레드 안전한 큐이며, dequeue가 비어 있으면 블록되어 생산자-소비자에 적합하다.
스레드 인수
create의 두 번째 인수부터는 서브루틴에 전달되는 인수이다; 어휘 변수는 스레드마다 독립적인 복사본이다.
병렬 작업
고정된 스레드 수로 작업을 가져와 처리한다; 공유 인덱스를 원자적으로 할당하여 작업마다 스레드를 생성하지 않는다.
스레드 풀 패턴
큐로 분배 + 결과 큐로 수집; end를 여러 번 호출하여 여러 블록된 스레드를 깨운다.
15.네트워크 프로그래밍
TCP 소켓, HTTP 클라이언트, URL 파싱, DNS 조회.
TCP 클라이언트
IO::Socket::INET가 연결을 생성한다; print로 전송하고 <...>로 응답을 읽는다.
TCP 서버
Listen으로 포트를 청취하고, accept로 연결을 수락한다; 각 연결은 에코하거나 자식 프로세스에 위임할 수 있다.
HTTP GET
HTTP::Tiny는 코어 모듈이다; get은 status/content를 반환하며, JSON::PP와 함께 파싱할 수 있다.
HTTP POST
post는 임의의 body를 전송한다; post_form은 자동으로 URL 인코딩하여 폼을 제출한다.
URL 파싱
URI 모듈로 URL을 분해·구축; query_form으로 쿼리 매개변수를 읽고 쓰며 자동 인코딩.
DNS 조회
Net::DNS가 A/MX/TXT 레코드를 해석; search는 응답 객체를 반환하며 외부 모듈이 필요.
소켓 옵션
setsockopt은 하위 옵션을 설정; timeout은 블록을 제어; IO::Select는 비블록 대기에 사용.
REST 클라이언트
HTTP::Tiny를 감싸 인증과 JSON을 통합 처리; 오류는 일관되게 호출자에게 던짐.
16.날짜와 시간
time/localtime, strftime 포맷, Time::Piece와 DateTime 처리.
localtime 분해
time으로 epoch를 얻음; localtime은 연월일시분초로 분해하며 월과 년의 오프셋에 주의.
strftime 포맷
POSIX::strftime는 %Y %m %d 같은 자리표시자로 포맷; %A %B는 요일과 월 이름을 출력.
타임스탬프 변환
timelocal/timegm은 로컬 또는 UTC 시간 배열을 다시 epoch로 변환하며 오프셋에 주의.
sleep 지연
sleep은 정수 초; Time::HiRes는 소수와 마이크로초 지원; select는 비블록 대기 가능.
소요 시간 측정
time은 초 단위 측정; Time::HiRes는 밀리초 단위; 일자 변경/시간대 차이는 DateTime 사용.
DateTime 객체
DateTime의 완전한 시간 처리: 생성, 값 접근, 시간대 변환과 날짜 산술.
문자열 파싱
Time::Piece::strptime은 형식에 따라 날짜 문자열을 파싱하여 epoch와 차이를 얻음.
포맷 객체
DateTime::Format::Strptime은 파싱과 포맷을 통합; RFC3339는 ISO 시간 처리.
17.프로세스와 명령
system/역따옴표로 명령 실행, 환경 변수, @ARGV, 시그널과 파이프.
명령 실행
역따옴표는 출력을 캡처; system은 실행 후 캡처하지 않음; 리스트 형식은 셸 주입을 피함.
exec와 system
exec는 현재 프로세스를 교체; system은 자식 프로세스 종료를 기다림; $?는 종료 상태를 저장.
환경 변수
%ENV 해시로 환경 변수를 읽고 쓰며 이후 자식 프로세스에 영향; local로 임시 격리 가능.
명령행 인수
@ARGV는 인수 리스트; 복잡한 인수 파싱은 Getopt::Long 선언식 사용.
종료 상태
exit N으로 종료 코드 설정; 0은 성공, 0이 아니면 실패; END 블록은 종료 전에 실행.
시그널 처리
$SIG{INT}로 시그널 캡처; 처리 함수는 플래그만 설정하고 메인 루프가 응답.
프로세스 파이프
-|은 자식 출력을 읽고 |-는 자식 입력에 쓰기; 양방향 상호작용은 IPC::Open3.
출력 캡처
리다이렉트로 stdout/stderr 병합; $?로 종료 코드 확인; Capture::Tiny로 구조적 캡처.
18.정규식
패턴 매칭, 문자 클래스, 수량사, 캡처 그룹, 사전 컴파일과 치환.
매칭 기초
=~는 매칭, !~는 비매칭; 앵커 ^ $ \b로 위치 지정; i 수식자로 대소문자 무시.
매칭과 추출
g는 전역 매칭; 리스트 컨텍스트는 모든 일치를 반환; grep와 결합해 배열 필터링.
문자 클래스
\d \w \s와 그 부정; 사용자 정의 [...]와 제외 [^...]; 수량사.
수량사와 백트래킹
기본은 탐욕, 비탐욕은 ? 추가; 소유 수량사 +는 백트래킹 금지; 중첩 수량사는 재앙적 백트래킹 주의.
캡처 그룹
$1 $2는 왼쪽 괄호 순서대로 캡처 접근; (?:)는 비캡처; (?<name>)는 이름 있는 캡처.
이름 있는 캡처
(?<name>...)는 이름 있는 그룹 + %+ 해시 접근; \k<name>은 역참조.
정규식 사전 컴파일
qr//로 한 번 컴파일해 재사용; 모듈 내 공유로 큰 루프 성능 향상; 수식자 사용 가능.
치환과 변환
s///는 치환, g는 전역, i는 대소문자 무시; 치환 부분에 $1 사용 가능; tr///는 문자 변환.
19.모듈과 공학화
모듈 구조, use/require, 옵션 파싱, CPAN 설치와 테스트.
모듈 구조
패키지 이름은 파일 경로에 대응; Exporter는 내보내기; 1;로 끝나야 use 성공.
use와 require
use는 컴파일 시 로드 후 임포트; require는 런타임 로드; do는 심볼 테이블 없이 파일 실행.
모듈 설치
cpanm으로 CPAN 모듈 설치; 핵심 모듈은 Perl과 함께 배포; cpanfile은 의존성 기록.
Getopt::Long
선언형 옵션 파싱: =s 문자열, =i 정수, 스위치, 별칭과 반전.
자주 쓰는 CPAN 모듈
DateTime/Moose/DBI 등 생태계; MetaCPAN으로 검색; eval로 가용성 탐지.
스크립트와 명령행
shebang으로 인터프리터 지정; perl -w/-e/-ne 같은 자주 쓰는 명령행 옵션.
패키징과 디렉터리
lib/t 디렉터리 배치, Makefile.PL 빌드; -Ilib로 로컬 개발 로드.
Test::More
plan으로 단언 수 선언; is/ok/like로 단언; prove -l로 테스트 일괄 실행.
이 치트시트에 대해
본 페이지는 Perl 5.38의 자기 완결적인 치트시트로, 언어 핵심과 가장 자주 쓰이는 내장 함수(소수의 CPAN 모듈 포함)가 실제 프로젝트에서 약 80%의 흔한 용법을 다룹니다. 내용은 현대 관용구를 지향합니다: `use strict` + `use warnings` 필수, 접미사형 제어 흐름, scalar/list 컨텍스트 구분, 레퍼런스로 복잡한 자료구조 만들기, `say` / `state` / `signatures`. Perl은 Larry Wall이 1987년에 발표한 다중 패러다임 동적 언어로, 「문제를 해결하는 방법은 여러 가지다(TMTOWTDI)」로 유명하며, 텍스트 처리, 시스템 관리와 웹 백엔드 영역에 깊은 저력이 있습니다. 권위 있는 참고는 Perl과 함께 설치되는 `perldoc`과 [Perl 공식 문서](https://perldoc.perl.org/)를 참고하세요. 19개 장은 각각 한 주제에 집중합니다 — 첫 프로그램부터 레퍼런스, bless 객체 지향과 흔한 실수까지. 각 절은 8–14개의 예제가 있는 소절(각 5–20줄)로 나뉘며, 총 약 150개 주제입니다. 코드 스니펫은 의도적으로 짧고 자기 해설적이므로 복사 후 바로 `perl`로 실행할 수 있습니다. 모든 처리는 브라우저에서 완료됩니다 — 업로드 없음, 추적 없음. 본 페이지는 GuruToolkit 무료 개발자 도구 모음의 일부이며, 코드 스니펫은 어떠한 보증 없이 자유롭게 사용할 수 있습니다.
버전 2.1.0