Perl 내장 함수
Perl 내장 함수 (perlfunc)
이번 장은 Perl에 내장된 모든 함수(function)와 함수처럼 생긴 키워드들을 다루는 레퍼런스예요. 이 섹션의 함수들은 모두 표현식 안에서 하나의 항(term)으로 쓰일 수 있어요. 크게 두 갈래로 나뉘는데, 바로 **리스트 연산자(list operator)**와 **이름 붙은 단항 연산자(named unary operator)**예요. 둘은 뒤따르는 쉼표와의 관계에서 우선순위가 달라요(우선순위 표는 perlop 참고). 리스트 연산자는 인수를 둘 이상 받고, 단항 연산자는 절대 둘 이상 받지 못해요. 그래서 쉼표는 단항 연산자의 인수를 끝내지만, 리스트 연산자에서는 그저 인수들을 구분할 뿐이에요. 단항 연산자는 보통 인수에 스칼라 컨텍스트를 주고, 리스트 연산자는 인수에 스칼라든 리스트든 컨텍스트를 줄 수 있어요. 둘 다 주는 경우에는 스칼라 인수가 먼저 오고 그 다음 리스트 인수가 오며, 그런 리스트 인수는 하나만 있을 수 있어요. 예를 들어 splice ARRAY,OFFSET,LENGTH,LIST는 세 개의 스칼라 인수 뒤에 리스트 하나를 받고, gethostbyname NAME은 네 개의 스칼라 인수를 받아요.
설명 (DESCRIPTION)
아래 문법 설명에서 리스트를 기대하고(그 리스트 요소들에 리스트 컨텍스트를 주는) 리스트 연산자는 인수로 LIST를 받는 것으로 표기해요. 그런 리스트는 스칼라 인수나 리스트 값의 어떤 조합으로도 이루어질 수 있는데, 리스트 값들은 마치 그 자리에 각각의 요소가 끼워진 것처럼 리스트 안에 포함되어 더 긴 1차원 리스트 값이 되어요. LIST의 리터럴 요소는 쉼표로 구분해야 해요.
아래 함수들은 인수를 괄호로 감싸거나 감싸지 않고도 쓸 수 있어요(문법 설명에서는 괄호를 생략해요). 괄호를 쓰면 적용되는 단순하지만 가끔 놀라운 규칙이 있어요. 함수처럼 보이면 함수다 — 그래서 우선순위는 신경 쓸 필요가 없어요. 그 외에는 리스트 연산자나 단항 연산자라서 우선순위가 중요해요. 함수와 왼쪽 괄호 사이의 공백은 무시되므로, 때로는 조심해야 해요:
print 1+2+4; # 7을 출력.
print(1+2) + 4; # 3을 출력.
print (1+2)+4; # 역시 3을 출력!
print +(1+2)+4; # 7을 출력.
print ((1+2)+4); # 7을 출력.
use warnings 프라그마와 함께 실행하면 이에 대해 경고를 받을 수 있어요. 예를 들어 위의 세 번째 줄은 다음처럼 경고해요:
print (...) interpreted as function at - line 1.
Useless use of integer addition in void context at - line 1.
아무 인수도 받지 않는 함수도 몇 개 있어요. 그 함수들은 단항도 리스트 연산자도 아닌 셈이죠. time, endpwent 따위가 그런 예예요. 예를 들어 time+86_400은 언제나 time() + 86_400을 뜻해요.
스칼라 컨텍스트와 리스트 컨텍스트 양쪽에서 쓸 수 있는 함수는, 치명적이지 않은 실패를 스칼라 컨텍스트에서는 undef 값을 반환하는 것으로, 리스트 컨텍스트에서는 빈 리스트를 반환하는 것으로 나타내는 게 일반적이에요.
중요한 규칙 하나를 꼭 기억하세요: 리스트 컨텍스트에서의 표현식 동작과 스칼라 컨텍스트에서의 동작을 연결하는 규칙은 없어요. 완전히 다른 두 가지 일을 할 수도 있어요. 각 연산자와 함수는 스칼라 컨텍스트에서 어떤 종류의 값이 가장 적절한지 스스로 정해요. 어떤 연산자는 리스트 컨텍스트였다면 반환했을 리스트의 길이를 반환하고, 어떤 것은 리스트의 첫 값을, 어떤 것은 마지막 값을, 또 어떤 것은 성공한 연산의 개수를 반환해요. 대체로 원하는 대로 동작하지만, 일관성만 원한다면 그건 다른 얘기예요.
스칼라 컨텍스트에서의 이름 붙은 배열은, 언뜻 보면 스칼라 컨텍스트의 리스트처럼 보이는 것과는 아주 달라요. 컴파일러는 컴파일 타임에 컨텍스트를 알기 때문에 스칼라 컨텍스트에서는 (1,2,3) 같은 리스트를 만들 수 없어요. 거기에는 리스트 결합 버전의 쉼표가 아니라 스칼라 쉼표 연산자가 생성되니까요. 즉, 애초에 리스트가 아니었다는 뜻이에요.
일반적으로 Perl에서 같은 이름의 시스템 호출("syscall" — 예: chown(2), fork(2), closedir(2) 등)을 감싸는 함수들은 성공하면 참(true), 그렇지 않으면 undef를 반환해요. 실패 시 -1을 반환하는 C 인터페이스와는 달라요. 이 규칙의 예외로 wait, waitpid, syscall이 있어요. 시스템 호출은 실패 시 특수 변수 $!도 설정해요. 다른 함수들은 우연히가 아니라면 그렇게 하지 않아요.
확장 모듈은 Perl 파서에 훅을 걸어 새로운 종류의 키워드로 시작하는 표현식을 정의할 수도 있어요. 그런 것들은 함수처럼 보일 수도 있지만, 완전히 다르게 보일 수도 있어요. 키워드 뒤의 문법은 전적으로 확장에 의해 정의돼요. 구현자라면 perlapi/PL_keyword_plugin 메커니즘을, 그런 모듈을 쓰는 사람이라면 해당 모듈 문서의 문법 설명을 보세요.
함수 분류 (Perl Functions by Category)
여기 Perl의 함수(일부 키워드와 이름 붙은 연산자처럼 함수처럼 보이는 것 포함)를 범주별로 모았어요. 어떤 함수는 한 곳 이상에 나타나요. 키워드가 만들어내는 것까지 포함한 모든 경고는 perldiag와 warnings에 설명돼 있어요.
스칼라·문자열 함수
chomp, chop, chr, crypt, fc, hex, index, lc, lcfirst, length, oct, ord, pack, q//, qq//, reverse, rindex, sprintf, substr, tr///, uc, ucfirst, y///
fc는"fc"기능(feature)이 활성화되거나CORE::접두사를 붙여야만 사용할 수 있어요."fc"기능은 현재 스코프에서use v5.16(이상) 선언과 함께 자동으로 켜져요.
정규식·패턴 매칭 함수
m//, pos, qr//, quotemeta, s///, split, study
숫자 함수
abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand
배열(@ARRAY) 함수
each, keys, pop, push, shift, splice, unshift, values
리스트 데이터 함수
all, any, grep, join, map, qw//, reverse, sort, unpack
해시(%HASH) 함수
delete, each, exists, keys, values
입출력(I/O) 함수
binmode, close, closedir, dbmclose, dbmopen, die, eof, fileno, flock, format, getc, print, printf, read, readdir, readline, rewinddir, say, seek, seekdir, select, syscall, sysread, sysseek, syswrite, tell, telldir, truncate, warn, write
say는"say"기능이 활성화되거나CORE::접두사를 붙여야만 사용할 수 있어요."say"기능은use v5.10(이상) 선언과 함께 자동으로 켜져요.
고정 길이 데이터·레코드 함수
pack, read, syscall, sysread, sysseek, syswrite, unpack, vec
파일 핸들·파일·디렉터리 함수
-X, chdir, chmod, chown, chroot, fcntl, glob, ioctl, link, lstat, mkdir, open, opendir, readlink, rename, rmdir, select, stat, symlink, sysopen, umask, unlink, utime
제어 흐름 키워드
break, caller, continue, die, do, dump, eval, evalbytes, exit, __FILE__, goto, last, __LINE__, method, next, __PACKAGE__, redo, return, sub, __SUB__, wantarray
break는 실험적인"switch"기능을 켜거나CORE::접두사를 써야만 사용할 수 있어요. 또한"switch"기능은perlsyn의 "Switch Statements"에 문서화된default,given,when문장을 켜요."switch"기능은use v5.10(이상)과 함께 자동으로 켜져요. Perl v5.14 이하에서는 다른 키워드와 마찬가지로continue도"switch"기능이 필요했어요.
evalbytes는"evalbytes"기능(또는CORE::)으로만,__SUB__는"current_sub"기능(또는CORE::)으로만 사용할 수 있어요. 둘 다use v5.16(이상)과 함께 자동으로 켜져요.
스코프 관련 키워드
caller, class, field, import, local, my, our, package, state, use
state는"state"기능이 활성화되거나CORE::접두사를 붙여야만 사용할 수 있고,use v5.10(이상)과 함께 자동으로 켜져요.
기타 함수
defined, formline, lock, prototype, reset, scalar, undef
프로세스·프로세스 그룹 함수
alarm, exec, fork, getpgrp, getppid, getpriority, kill, pipe, qx//, readpipe, setpgrp, setpriority, sleep, system, times, wait, waitpid
모듈 관련 키워드
do, import, no, package, require, use
클래스·객체지향 키워드
bless, class, __CLASS__, dbmclose, dbmopen, field, method, package, ref, tie, tied, untie, use
저수준 소켓 함수
accept, bind, connect, getpeername, getsockname, getsockopt, listen, recv, send, setsockopt, shutdown, socket, socketpair
System V 프로세스 간 통신(IPC) 함수
msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop, shmctl, shmget, shmread, shmwrite
사용자·그룹 정보 가져오기
endgrent, endhostent, endnetent, endpwent, getgrent, getgrgid, getgrnam, getlogin, getpwent, getpwnam, getpwuid, setgrent, setpwent
네트워크 정보 가져오기
endprotoent, endservent, gethostbyaddr, gethostbyname, gethostent, getnetbyaddr, getnetbyname, getnetent, getprotobyname, getprotobynumber, getprotoent, getservbyname, getservbyport, getservent, sethostent, setnetent, setprotoent, setservent
시간 관련 함수
gmtime, localtime, time, times
함수가 아닌 키워드
ADJUST, and, AUTOLOAD, BEGIN, catch, CHECK, cmp, CORE, __DATA__, default, defer, DESTROY, else, elseif, elsif, END, __END__, eq, finally, for, foreach, ge, given, gt, if, INIT, isa, le, lt, ne, not, or, try, UNITCHECK, unless, until, when, while, x, xor
이식성 (Portability)
Perl은 Unix에서 태어났기 때문에 흔한 Unix 시스템 호출을 모두 쓸 수 있어요. Unix가 아닌 환경에서는 일부 Unix 시스템 호출의 기능을 쓸 수 없거나, 사용 가능한 기능의 세부 사항이 조금 다를 수 있어요. 영향을 받는 Perl 함수는 다음과 같아요:
-X, binmode, chmod, chown, chroot, crypt, dbmclose, dbmopen, dump, endgrent, endhostent, endnetent, endprotoent, endpwent, endservent, exec, fcntl, flock, fork, getgrent, getgrgid, gethostbyname, gethostent, getlogin, getnetbyaddr, getnetbyname, getnetent, getppid, getpgrp, getpriority, getprotobynumber, getprotoent, getpwent, getpwnam, getpwuid, getservbyport, getservent, getsockopt, glob, ioctl, kill, link, lstat, msgctl, msgget, msgrcv, msgsnd, open, pipe, readlink, rename, select, semctl, semget, semop, socket, socketpair, stat, symlink, syscall, sysopen, system, times, truncate, umask, unlink, utime, wait, waitpid
이 함수들의 이식성에 대한 더 자세한 내용은 perlport와 그 외 플랫폼별 문서를 참고하세요.
알파벳순 함수 목록 (Alphabetical Listing of Perl Functions)
-X FILEHANDLE / -X EXPR / -X DIRHANDLE / -X
-X는 아래 나열한 글자 중 하나를 X로 하는 파일 테스트예요. 이 단항 연산자는 파일 이름·파일 핸들·디렉터리 핸들 등 인수 하나를 받아 그 파일에 대해 어떤 성질이 참인지 검사해요. 인수를 생략하면 -t가 STDIN을 검사하는 것을 제외하고 $_를 검사해요. 달리 문서화되지 않았다면 참이면 1, 거짓이면 ''을 반환해요. 파일이 없거나 검사할 수 없으면 undef를 반환하고 $!(errno)를 설정해요. -l 검사를 제외하고 모두 lstat()이 아니라 stat()을 쓰기 때문에 심볼릭 링크를 따라가요(그래서 끊어진(댕글링) 심볼릭 링크는 검사할 수 없어서 실패로 보고돼요).
이름이 재미있어도 우선순위는 다른 이름 붙은 단항 연산자와 같아요. 연산자는 다음 중 하나예요:
-r 파일이 유효 uid/gid로 읽을 수 있는지.
-w 파일이 유효 uid/gid로 쓸 수 있는지.
-x 파일이 유효 uid/gid로 실행할 수 있는지.
-o 파일이 유효 uid 소유인지.
-R 파일이 실제 uid/gid로 읽을 수 있는지.
-W 파일이 실제 uid/gid로 쓸 수 있는지.
-X 파일이 실제 uid/gid로 실행할 수 있는지.
-O 파일이 실제 uid 소유인지.
-e 파일이 존재하는지.
-z 파일 크기가 0인지(비어 있는지).
-s 파일 크기가 0이 아닌지(바이트 단위 크기를 반환).
-f 파일이 일반 파일인지.
-d 파일이 디렉터리인지.
-l 파일이 심볼릭 링크인지(파일 시스템이 심볼릭 링크를 지원하지 않으면 거짓).
-p 파일이 이름 붙은 파이프(FIFO)이거나, 파일 핸들이 파이프인지.
-S 파일이 소켓인지.
-b 파일이 블록 특수 파일인지.
-c 파일이 문자 특수 파일인지.
-t 파일 핸들이 tty에 열려 있는지.
-u 파일에 setuid 비트가 설정되어 있는지.
-g 파일에 setgid 비트가 설정되어 있는지.
-k 파일에 sticky 비트가 설정되어 있는지.
-T 파일이 ASCII 또는 UTF-8 텍스트 파일인지(휴리스틱 추측).
-B 파일이 "바이너리" 파일인지(-T의 반대).
-M 스크립트 시작 시각에서 파일 수정 시각을 뺀 값(일 단위).
-A 접근 시각에 대해서도 동일.
-C inode 변경 시각에 대해서도 동일(Unix 기준, 다른 플랫폼은 다를 수 있음).
예시:
while (<>) {
chomp;
next unless -f $_; # 특수 파일 무시
#...
}
-s/a/b/는 부정 치환(negated substitution)을 하는 게 아니라는 점에 주의하세요. -exp($foo)는 여전히 예상대로 동작해요. 마이너스 뒤의 단일 글자만 파일 테스트로 해석되거든요.
이 연산자들은 위에서 설명한 "함수처럼 보이면 함수다" 규칙의 적용을 받지 않아요. 즉, 연산자 뒤의 여는 괄호가 인수로 취해질 코드의 범위에 영향을 주지 않아요. 연산자와 뒤 코드를 분리하려면 여는 괄호를 연산자 앞에 두세요(물론 단항 연산자보다 우선순위가 높은 연산자에만 해당해요):
-s($file) + 1024 # 아마 틀림; -s($file + 1024)와 같음
(-s $file) + 1024 # 맞음
파일 권한 연산자 -r, -R, -w, -W, -x, -X의 해석은 기본적으로 파일 모드와 사용자의 uid/gid만을 기준으로 해요. 실제로 파일을 읽거나 쓰거나 실행할 수 없는 다른 이유가 있을 수 있어요. 예를 들어 네트워크 파일 시스템 접근 제어, ACL(접근 제어 목록), 읽기 전용 파일 시스템, 인식되지 않는 실행 형식 등이죠. 이 여섯 연산자로 어떤 연산이 가능한지 검증하려는 것은 보통 실수라는 점에 주의하세요. 경쟁 조건(race condition)에 열려 있을 수 있으니까요.
또한 로컬 파일 시스템의 수퍼유저에게는 -r, -R, -w, -W 테스트가 항상 1을 반환하고, -x, -X는 모드에 실행 비트가 하나라도 있으면 1을 반환해요. 수퍼유저가 실행하는 스크립트는 실제 파일 모드를 알기 위해 stat을 하거나, 유효 uid를 일시적으로 다른 값으로 바꾸는 게 필요할 수 있어요.
ACL을 쓴다면 filetest라는 프라그마가 맨 stat 모드 비트보다 더 정확한 결과를 낼 수 있어요. use filetest 'access' 아래에서는 위 파일 테스트들이 access(2) 계열 시스템 호출로 권한이 부여될 수 있는지를 검사해요. 이 프라그마 아래에서는 -x·-X 테스트가 실행 권한 비트(또는 추가 ACL)가 하나도 없어도 참을 반환할 수 있다는 점에 주의하세요. 이 이상함은 기본 시스템 호출의 정의 때문이에요. 또한 use filetest 'access' 구현 때문에 _ 특수 파일 핸들이 이 프라그마가 적용되는 동안 파일 테스트 결과를 캐시하지 않아요.
-T와 -B 테스트는 이렇게 동작해요. 파일의 첫 블록쯤을 살펴 non-ASCII 문자를 포함한 유효한 UTF-8인지 확인해요. 그렇다면 -T 파일이에요. 그렇지 않으면 같은 부분에서 이상한 제어 코드나 높은 비트가 설정된 문자 같은 이상한 문자를 찾아요. 문자의 3분의 1 이상이 이상하면 -B 파일이고, 아니면 -T 파일이에요. 또 검사한 부분에 0바이트가 있는 파일은 바이너리 파일로 간주해요. (LC_CTYPE을 포함한 use locale 스코프 안에서 실행되면, 이상한 문자는 현재 로케일에서 출력 가능하지도 공백도 아닌 모든 것이에요.) -T·-B를 파일 핸들에 쓰면 첫 블록 대신 현재 I/O 버퍼를 검사해요. 빈 파일이나 EOF에 있는 파일 핸들을 검사하면 -T·-B 둘 다 참을 반환해요. -T 테스트를 하려면 파일을 읽어야 하므로, 대부분 next unless -f $file && -T $file처럼 먼저 -f를 쓰는 게 좋아요.
파일 테스트(또는 stat, lstat 연산자) 중 하나에 밑줄 하나로 이루어진 특수 파일 핸들을 주면, 이전 파일 테스트의 stat 구조가 사용되어 시스템 호출 하나를 아껴요. (-t에는 동작하지 않고, lstat과 -l은 실제 파일이 아니라 심볼릭 링크 값을 stat 구조에 남긴다는 걸 기억해야 해요. 또한 stat 버퍼가 lstat 호출로 채워졌다면 -T·-B가 stat _의 결과로 그것을 재설정해요.) 예시:
print "Can do.\n" if -r $x || -w _ || -x _;
stat($filename);
print "Readable\n" if -r _;
print "Writable\n" if -w _;
print "Executable\n" if -x _;
print "Setuid\n" if -u _;
print "Setgid\n" if -g _;
print "Sticky\n" if -k _;
print "Text\n" if -T _;
print "Binary\n" if -B _;
Perl 5.10.0부터 순전한 문법적 설탕으로 파일 테스트 연산자를 쌓을 수 있어요. -f -w -x $file은 -x $file && -w _ && -f _와 동등해요. (이건 그냥 멋진 문법일 뿐이에요. -f $file의 반환 값을 다른 파일 테스트 연산자의 인수로 써도 특별한 마법은 일어나지 않아요.)
코드 사용자들을 신비한 문법 오류로 헷갈리게 하지 않으려면 스크립트 맨 위에 이렇게 넣으세요:
use v5.10; # 파일 테스트 연산자를 쌓을 수 있게
abs VALUE / abs
인수의 절댓값을 반환해요. VALUE를 생략하면 $_를 사용해요.
accept NEWSOCKET,GENERICSOCKET
accept(2)처럼 들어오는 소켓 연결을 받아들여요. 성공하면 패킹된 주소를 반환하고, 그렇지 않으면 거짓을 반환해요. perlipc의 "Sockets: Client/Server Communication" 예시를 참고하세요. 파일에 close-on-exec 플래그를 지원하는 시스템에서는 $^F 값에 따라 새로 열린 파일 디스크립터에 그 플래그가 설정돼요.
alarm SECONDS / alarm
지정한 벽시계(wallclock) 초가 지난 후 이 프로세스에 SIGALRM이 전달되도록 예약해요. SECONDS를 지정하지 않으면 $_의 값을 사용해요. (일부 시스템에서는 초를 세는 방식 때문에 경과 시간이 지정한 것보다 최대 1초 정도 더하거나 덜할 수 있고, 프로세스 스케줄링이 신호 전달을 더 지연시킬 수도 있어요.)
타이머는 한 번에 하나만 셀 수 있어요. 호출마다 이전 타이머가 꺼지고, 0을 넘기면 새 타이머를 시작하지 않고 이전 타이머를 취소해요. 반환 값은 이전 타이머에 남은 시간이에요.
1초보다 더 미세한 지연이 필요하다면 Time::HiRes 모듈(CPAN에 있고 Perl 5.8부터 표준 배포에 포함)이 ualarm을 제공해요. Perl의 4-인수 select를 처음 세 인수를 undef로 두고 쓸 수도 있고, 시스템이 지원한다면 syscall 인터페이스로 setitimer(2)를 쓸 수도 있어요. alarm과 sleep 호출을 섞는 것은 보통 실수예요. 시스템에서 sleep이 내부적으로 alarm으로 구현되어 있을 수 있으니까요.
alarm으로 시스템 호출에 타임아웃을 걸고 싶다면 eval/die 쌍을 써야 해요. 일부 시스템에서 Perl이 신호 핸들러를 시스템 호출 재시작으로 설정하기 때문에, alarm이 $!를 EINTR로 설정하며 시스템 호출을 실패시키리라 믿으면 안 돼요. eval/die는 perlipc의 "Signals"에 나온 주의 사항만 감안하면 항상 동작해요.
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n 필요
alarm $timeout;
my $nread = sysread $socket, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # 예상 밖의 오류는 전파
# 타임아웃됨
}
atan2 Y,X
Y/X의 아크탄젠트를 -PI부터 PI까지 범위로 반환해요. use POSIX 프라그마의 atan2와 함께 PI, TAN2, TAN 상수를 정의할 수 있어요.
bind SOCKET,NAME
소켓을 이름에 묶어요. bind(2)처럼 동작해요. 성공하면 참, 그렇지 않으면 거짓을 반환해요. 패킹된 주소는 pack_sockaddr_in 등 Socket 모듈의 함수로 만들 수 있어요.
binmode FILEHANDLE, LAYER
파일 핸들을 이진(바이너리) 또는 텍스트 모드로 배열해요. LAYER를 지정하면 그 I/O 레이어로 설정해요. binmode는 읽기나 쓰기 전에 호출해야 해요. 성공하면 참, 실패하면 undef를 반환해요. 크로스 플랫폼 코드에서는 binmode를 항상 명시적으로 호출하는 게 좋아요.
bless REF,CLASSNAME
REF가 참조하는 것을 CLASSNAME 패키지의 객체로 만드세요. CLASSNAME을 생략하면 REF가 이미 참조하는 패키지를 사용해요. ref가 참조를 반환하도록 하려면 CLASSNAME은 꼭 식별자로 이루어진 검증된 클래스 이름이어야 해요.
break
given 블록 밖으로 뛰쳐나가세요. "switch" 기능을 켜야 사용할 수 있어요.
caller EXPR / caller
현재 서브루틴 호출에 대한 문맥 정보를 반환해요. 스칼라 컨텍스트에서는 호출자의 패키지 이름을, 리스트 컨텍스트에서는 패키지·파일 이름·행 번호를 반환해요. EXPR을 주면 실행 스택을 되돌아가며 더 과거의 호출자 정보를 주고, 배열 컨텍스트에서 hashref가 추가돼요.
chdir EXPR / chdir
작업 디렉터리를 EXPR(생략 시 $_ 또는 HOME)로 바꿔요. 성공하면 참, 실패하면 거짓을 반환해요.
chmod LIST
파일 목록의 권한을 바꿔요. LIST의 첫 요소가 모드(숫자)이고 나머지가 파일 이름이에요. 성공하면 바뀐 파일 수를 반환해요. chmod(2)의 시맨틱을 따르니 심볼릭 링크는 따라가지 않아요.
chomp VARIABLE / chomp
변수(또는 리스트)에서 줄바꿈 문자를 제거해요. $/ 값에 해당하는 수만큼 제거하고, 제거한 문자 수를 반환해요. 인수가 없으면 $_를 써요.
chop VARIABLE / chop
변수(또는 리스트)의 마지막 문자를 제거하고 그 제거한 문자를 반환해요. chomp와 달리 문자 수에 상관없이 딱 하나만 제거해요.
chown LIST
파일 소유자를 바꿔요. LIST의 처음 두 요소가 uid와 gid이고 나머지가 파일 이름이에요. gid를 바꾸지 않으려면 -1을 넘겨요. 성공하면 바뀐 파일 수를 반환해요.
chr NUMBER / chr
NUMBER에 해당하는 문자를 반환해요. 예를 들어 chr(65)는 "A"예요. UTF-8 처리에 대해서는 perlunicode를 참고하세요. 반대는 ord예요.
close FILEHANDLE / close
파일 핸들을 닫아요. 성공하면 참을 반환해요. FILEHANDLE을 생략하면 현재 선택된 파일 핸들을 닫아요. 파이프를 닫을 때는 자식 프로세스의 종료 상태를 $?로 확인할 수 있어요.
closedir DIRHANDLE
디렉터리 핸들을 닫아요. closedir(2)처럼 동작해요.
connect SOCKET,NAME
소켓을 원격 주소에 연결해요. connect(2)처럼 동작해요. 성공하면 참을 반환해요.
continue BLOCK
while/foreach 루프에서 next와 함께 쓰이는 블록이에요. continue 블록은 루프 본문이 끝난 뒤 실행돼요.
cos EXPR / cos
EXPR(라디안)의 코사인을 반환해요.
crypt PLAINTEXT,SALT
PLAINTEXT를 암호화해요. crypt(3)처럼 동작해요. 저장된 해시와의 비교용으로 써요.
dbmclose HASH
dbm 파일과 해시의 연결을 끊어요.
dbmopen HASH,DBNAME,MASK
dbm 파일을 해시에 연결해요. DBNAME이 확장자 없이 주어지면 dbm 구현에 따라 여러 파일이 만들어질 수 있어요. MASK로 파일 권한을 정해요.
defined EXPR / defined
EXPR이 undef 값이 아닌지 검사해요. 파일 핸들·서브루틴 이름 등도 검사할 수 있어요. defined는 undef()로 값을 undef로 만든 요소를 스칼라 컨텍스트로 검사할 때만 유용해요.
delete EXPR
해시에서 지정한 키(들)와 그 값을 제거해요. 주어진 키에 대응하는 값을 반환해요.
die LIST
LIST를 STDERR로 출력하고 프로그램을 종료해요. $!에 값이 있고 LIST가 비어 있거나 $!로 끝나면 $! 값을 포함해요. 예외는 eval로 잡을 수 있어요.
do BLOCK / do EXPR
do BLOCK은 블록을 한 번 실행해요. do EXPR은 파일을 Perl 코드로 읽어 실행하고 마지막 표현식 값을 반환해요.
dump LABEL / dump
프로그램의 현재 상태를 core dump 파일로 저장해요. 주로 undump 프로그램과 함께 쓰여요.
each HASH / each ARRAY
해시에서 (키,값) 쌍을 하나씩 반환해요. 리스트 컨텍스트에서는 2-요소 리스트를, 스칼라 컨텍스트에서는 키만 반환해요. 순회가 끝나면 빈 값을 반환해요.
eof FILEHANDLE / eof
파일 핸들이 끝에 도달했는지 검사해요. eof()는 마지막으로 읽은 파일을 검사해요. eof는 while (<>)의 <>가 가진 파일 끝 감지와는 달라요.
eval EXPR / eval BLOCK
eval EXPR은 표현식을 실행하고, eval BLOCK은 블록을 컴파일·실행해요. 실행 중 발생한 예외(die 등)는 $@에 저장되고 실행은 계속돼요. eval은 컴파일 오류도 잡아요.
exec LIST / exec
현재 프로세스를 외부 명령으로 교체해요. 반환하지 않아요. 성공하면 절대 돌아오지 않고, 실패해야만 반환해요.
exists EXPR
해시에 키가 존재하는지 검사해요. 배열 요소나 서브루틴도 검사할 수 있어요.
exit EXPR / exit
프로그램을 종료해요. EXPR(또는 $?)을 종료 상태로 사용해요. END 블록은 여전히 실행돼요.
exp EXPR / exp
자연로그의 밑 e를 EXPR 제곱한 값을 반환해요.
fc EXPR / fc
문자열을 폴드케이스(foldcase)로 변환해요. 대소문자를 무시한 비교 등을 위한 풀 케이스 접기예요. "fc" 기능이 필요해요.
fcntl FILEHANDLE,FUNCTION,SCALAR
파일 핸들에 fcntl(2) 함수를 호출해요. FUNCTION은 Fcntl 모듈로 정의해요.
fileno FILEHANDLE
파일 핸들의 파일 디스크립터를 반환해요. 예를 들어 select 등의 인수로 쓸 수 있어요.
flock FILEHANDLE,OPERATION
파일 핸들에 flock(2)를 호출해요. OPERATION으로 LOCK_SH, LOCK_EX, LOCK_NB 등을 지정해요.
fork
자식 프로세스를 생성해요. 부모에게는 자식 PID를, 자식에게는 0을 반환해요. 실패하면 undef를 반환해요.
format
이름 붙은 형식(format)을 선언해요. format NAME =로 시작해요.
formline PICTURE,LIST
형식 시스템의 내부 함수예요. write에서 사용돼요. 보통 직접 호출할 일은 없어요.
getc FILEHANDLE / getc
파일 핸들에서 다음 문자 하나를 읽어 반환해요. EOF면 빈 문자열을 반환해요. FILEHANDLE을 생략하면 STDIN을 읽어요.
getlogin
로그인한 사용자의 로그인 이름을 반환해요.
getpeername SOCKET
소켓의 원격 피어 주소를 패킹된 주소로 반환해요. SOCKET을 생략하면 $_를 사용해요.
getpgrp PID / getpgrp
프로세스의 프로세스 그룹을 반환해요.
getppid
부모 프로세스의 프로세스 ID를 반환해요.
getpriority WHICH,WHO
프로세스·프로세스 그룹·사용자의 현재 우선순위를 반환해요. WHICH는 PRIO_PROCESS 등으로 지정해요.
getsockname SOCKET
소켓의 로컬 주소를 패킹된 주소로 반환해요.
getsockopt SOCKET,LEVEL,OPTNAME
소켓 옵션을 가져와요.
glob EXPR / glob
파일 이름 패턴(와일드카드)을 확장해 파일 이름 목록을 반환해요. <$pattern>처럼 <> 안에도 쓸 수 있어요.
gmtime EXPR / gmtime
시각을 GMT 기준으로 변환한 9-요소 리스트를 반환해요. 스칼라 컨텍스트에서는 ctime(3) 형식 문자열을 반환해요.
goto LABEL / goto EXPR / goto &NAME
프로그램 위치나 서브루틴으로 점프해요. 사용이 까다로우니 신중히 써야 해요.
grep BLOCK LIST / grep EXPR,LIST
LIST의 요소 중 표현식이 참인 것만 골라 반환해요. 스칼라 컨텍스트에서는 선택된 요소의 수를 반환해요.
hex EXPR / hex
16진수 문자열을 십진수 값으로 변환해요.
import LIST
이름 붙은 패키지의 import 메서드를 호출해요. use에 의해 내부적으로 호출돼요.
index STR,SUBSTR,POSITION
STR에서 SUBSTR가 처음 나타나는 위치를 반환해요. POSITION을 주면 그 위치부터 찾아요. 없으면 -1을 반환해요.
int EXPR / int
EXPR의 정수부를 반환해요. 소수 부분을 잘라내요.
ioctl FILEHANDLE,FUNCTION,SCALAR
파일 핸들에 ioctl(2)를 호출해요.
join EXPR,LIST
LIST의 요소들을 EXPR(구분자)로 이어 하나의 문자열로 반환해요.
keys HASH
해시의 키 목록을 반환해요. 스칼라 컨텍스트에서는 키의 개수를 반환해요. 순회 중 해시를 바꾸면 안 돼요.
kill SIGNAL, LIST
프로세스 목록에 신호를 보내요. SIGNAL은 시그널 번호나 이름일 수 있어요. 실패하면 $!을 설정하고 0을 반환해요.
last LABEL / last
루프를 즉시 빠져나와요. LABEL로 중첩 루프에서 특정 루프를 빠져나올 수 있어요.
lc EXPR / lc
문자열을 소문자로 변환해요.
lcfirst EXPR / lcfirst
문자열의 첫 글자만 소문자로 변환해요.
length EXPR / length
문자열의 길이(문자 수)를 반환해요.
link OLDFILE,NEWFILE
OLDFILE에 대한 하드 링크 NEWFILE를 만들어요. 성공하면 참을 반환해요.
listen SOCKET,QUEUESIZE
소켓을 연결 대기 상태로 만들어요. listen(2)처럼 동작해요.
local EXPR
변수의 값을 블록 내에서 일시적으로 바꿔요. 블록을 벗어나면 원래 값으로 되돌아가요.
localtime EXPR / localtime
시각을 로컬 시간대 기준 9-요소 리스트로 변환해요. 스칼라 컨텍스트에서는 ctime(3) 형식 문자열을 반환해요.
lock THING
공유 변수에 대한 잠금을 얻어요. 주로 것들(threads)과 함께 써요.
log EXPR / log
EXPR의 자연로그를 반환해요.
lstat FILEHANDLE / lstat
stat과 같지만 심볼릭 링크 자체를 따라가지 않고 링크의 정보를 반환해요.
m//
패턴 매칭 연산자예요. 문자열이 정규식을 만족하는지 검사해요. 만족하면 참을 반환해요.
map BLOCK LIST / map EXPR,LIST
LIST의 각 요소에 블록(또는 표현식)을 적용한 결과 리스트를 반환해요. 새 리스트의 요소 수는 원본과 같을 필요가 없어요.
mkdir FILENAME,MODE / mkdir
디렉터리를 만들어요. 성공하면 참, 실패하면 $!을 설정하고 0을 반환해요.
msgctl ID,CMD,ARG
System V 메시지 큐 제어 함수예요.
msgget KEY,FLAGS
System V 메시지 큐를 얻어요.
msgrcv ID,VAR,SIZE,TYPE,FLAGS
메시지 큐에서 메시지를 받아요.
msgsnd ID,MSG,FLAGS
메시지 큐에 메시지를 보내요.
my VARLIST
블록 스코프의 로컬 변수를 선언해요.
next LABEL / next
루프 본문의 현재 반복을 끝내고 다음 반복으로 넘어가요.
no MODULE VERSION LIST
모듈이 내보낸 심볼을 비활성화해요. use의 반대예요.
oct EXPR / oct
8진수 문자열을 십진수로 변환해요. 0x, 0b 접두사를 인식해요.
open FILEHANDLE,MODE,EXPR / open
파일·파이프·디렉터리 핸들을 열어요. 성공하면 참, 실패하면 undef를 반환해요. 3-인수 형식이 권장돼요.
opendir DIRHANDLE,EXPR
디렉터리 핸들을 열어요. 성공하면 참을 반환해요.
ord EXPR / ord
문자의 코드 포인트를 반환해요. chr의 반대예요.
our VARLIST
패키지 전역 변수를 선언해요.
pack TEMPLATE,LIST
TEMPLATE에 따라 리스트 값을 이진 구조로 포장해요. 고정 길이 데이터 생성에 써요.
package NAMESPACE
이후 코드의 네임스페이스를 선언해요.
pipe READHANDLE,WRITEHANDLE
읽기-쓰기 파이프 쌍을 만들어요.
pop ARRAY / pop
배열의 마지막 요소를 제거해 반환해요. 배열이 비어 있으면 undef를 반환해요.
pos SCALAR / pos
마지막 m//g 검색의 오프셋을 반환·설정해요.
print FILEHANDLE LIST / print
목록을 파일 핸들에 출력해요. 기본은 현재 선택된 출력 핸들이고 $_를 출력해요.
printf FILEHANDLE FORMAT, LIST / printf
FORMAT에 따라 형식화된 출력을 해요. sprintf와 같지만 출력만 해요.
prototype FUNCTION
함수의 프로토타입을 반환해요.
push ARRAY,LIST
배열 끝에 요소를 추가해요.
q/STRING/ / qq/STRING/ / qw/STRING/ / qx/STRING/
따옴표류 연산자예요. q//는 작은따옴표, qq//는 큰따옴표, qw//는 단어 목록, qx//는 명령 실행을 뜻해요.
quotemeta EXPR / quotemeta
문자열에서 알파벳·숫자·밑줄이 아닌 문자를 백슬래시로 이스케이프해요. 정규식에서 리터럴 텍스트로 쓸 때 유용해요.
rand EXPR / rand
0과 EXPR 사이의 난수를 반환해요. EXPR을 생략하면 0과 1 사이예요.
read FILEHANDLE,SCALAR,LENGTH,OFFSET
파일 핸들에서 LENGTH 바이트를 읽어 SCALAR에 넣어요. 읽은 바이트 수를 반환하고, EOF면 0을 반환해요.
readdir DIRHANDLE
디렉터리 핸들에서 다음 항목을 반환해요. 리스트 컨텍스트에서는 모든 항목을 반환해요.
readline EXPR / readline
EXPR이 파일 핸들일 때 그 파일에서 한 줄을 읽어 반환해요. <> 연산자와 같아요.
readlink EXPR / readlink
심볼릭 링크가 가리키는 대상의 이름을 반환해요.
readpipe EXPR / readpipe
EXPR을 명령으로 실행해 그 출력을 반환해요. qx//와 같아요.
recv SOCKET,SCALAR,LENGTH,FLAGS
소켓에서 메시지를 받아요.
redo LABEL / redo
루프의 현재 반복을 다시 시작해요. 조건 검사 없이 본문 처음으로 돌아가요.
ref EXPR / ref
EXPR이 참조하는 것의 타입을 문자열로 반환해요. 참조가 아니면 빈 문자열을 반환해요.
rename OLDNAME,NEWNAME
파일 이름을 바꿔요. 성공하면 참을 반환해요.
require VERSION / require EXPR
모듈을 로드하거나 Perl 버전을 요구해요. 성공하면 참을 반환해요.
reset EXPR
패턴 변수($1 등)나 변수를 초기화해요.
return EXPR / return
서브루틴·eval·do 블록에서 반환해요. EXPR을 생략하면 빈 리스트를 반환해요.
reverse LIST
리스트 또는 문자열을 뒤집어요. 리스트 컨텍스트에서는 리스트를, 스칼라 컨텍스트에서는 문자열을 뒤집어요.
rewinddir DIRHANDLE
디렉터리 핸들을 시작 위치로 되감아요.
rindex STR,SUBSTR,POSITION
STR에서 SUBSTR가 마지막으로 나타나는 위치를 반환해요. 없으면 -1을 반환해요.
rmdir FILENAME / rmdir
디렉터리를 제거해요. 성공하면 참을 반환해요.
s/PATTERN/REPLACEMENT/
치환 연산자예요. 문자열에서 정규식을 치환해요.
say FILEHANDLE LIST / say
print와 같지만 끝에 자동으로 줄바꿈을 붙여요. "say" 기능이 필요해요.
scalar EXPR
표현식에 강제로 스칼라 컨텍스트를 적용해요.
seek FILEHANDLE,POSITION,WHENCE
파일 핸들의 위치를 설정해요. 성공하면 참을 반환해요.
seekdir DIRHANDLE,POS
디렉터리 핸들의 위치를 설정해요.
select FILEHANDLE / select RBITS,WBITS,EBITS,TIMEOUT
인수가 하나면 기본 출력 파일 핸들을 설정해요. 네 개면 select(2)처럼 파일 디스크립터의 상태를 기다려요.
semctl ID,SEMNUM,CMD,ARG
System V 세마포어 제어 함수예요.
semget KEY,NSEMS,FLAGS
System V 세마포어 세트를 얻어요.
semop KEY,OPSTRING
System V 세마포어 연산을 수행해요.
send SOCKET,MSG,FLAGS,TO
소켓으로 메시지를 보내요.
setpgrp PID,PGRP
프로세스 그룹을 설정해요.
setpriority WHICH,WHO,PRIORITY
프로세스 우선순위를 설정해요.
setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
소켓 옵션을 설정해요.
shift ARRAY / shift
배열의 첫 요소를 제거해 반환해요. 그 외 스코프에서는 @ARGV를 써요.
shmctl ID,CMD,ARG
System V 공유 메모리 제어 함수예요.
shmget KEY,SIZE,FLAGS
System V 공유 메모리 세그먼트를 얻어요.
shmread ID,VAR,POS,SIZE / shmwrite ID,STRING,POS,SIZE
공유 메모리에 읽고 써요.
shutdown SOCKET,HOW
소켓의 양방향 연결을 닫아요.
sin EXPR / sin
EXPR(라디안)의 사인을 반환해요.
sleep EXPR / sleep
지정한 초 동안 프로세스를 잠재워요. 실제 잠든 초 수를 반환해요.
socket SOCKET,DOMAIN,TYPE,PROTOCOL
소켓을 만들어요.
socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
이름 없는 소켓 쌍을 만들어요.
sort SUBNAME LIST / sort BLOCK LIST / sort LIST
리스트를 정렬해요. 기본은 문자열 비교예요. 커스텀 비교는 블록이나 서브루틴으로 지정해요.
splice ARRAY,OFFSET,LENGTH,LIST
배열의 일부를 잘라내고(선택적으로) 다른 요소로 대체해요.
split /PATTERN/,EXPR,LIMIT
문자열을 패턴으로 나눠 리스트로 반환해요. 스칼라 컨텍스트에서는 나뉜 조각 수를 반환해요.
sprintf FORMAT, LIST
FORMAT에 따라 리스트를 형식화한 문자열을 반환해요. C의 sprintf 시맨틱과 유사하지만 Perl적인 확장이 많아요.
sqrt EXPR / sqrt
제곱근을 반환해요.
srand EXPR / srand
난수 생성기의 시드를 설정해요. 자동으로 초기화되므로 보통 직접 부를 필요는 없어요.
stat FILEHANDLE / stat EXPR
파일의 상태 정보를 13-요소 리스트로 반환해요.
state VARLIST
블록 스코프의 정적(지속되는) 변수를 선언해요. "state" 기능이 필요해요.
study SCALAR / study
이후 일치를 위해 문자열을 최적화해요. 현대 Perl에서 성능 이점이 거의 없어요.
sub NAME BLOCK / sub NAME / sub BLOCK
서브루틴을 선언하거나 익명 서브루틴을 만들어요.
substr EXPR,OFFSET,LENGTH,REPLACEMENT
문자열의 일부를 추출하거나 대체해요.
symlink OLDFILE,NEWFILE
심볼릭 링크를 만들어요. 성공하면 참을 반환해요.
syscall NUMBER, LIST
시스템 호출을 직접 호출해요. 매우 위험한 연산이에요.
sysopen FILEHANDLE,FILENAME,MODE
open(2)을 사용해 파일을 열어요.
sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
시스템 호출 read(2)로 읽어요.
sysseek FILEHANDLE,POSITION,WHENCE
lseek(2)로 파일 위치를 설정해요.
system LIST
외부 명령을 실행하고 종료 상태를 반환해요.
syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET
write(2)로 써요.
tell FILEHANDLE / tell
파일 핸들의 현재 위치를 반환해요.
telldir DIRHANDLE
디렉터리 핸들의 현재 위치를 반환해요.
tie VARIABLE,CLASSNAME,LIST
변수를 클래스에 묶어 객체로 감싸요.
tied VARIABLE
변수에 묶인 객체 참조를 반환해요.
time
현재 시각(에포크 이후 초)을 반환해요.
times
프로세스와 자식 프로세스가 사용한 CPU 시간 목록을 반환해요.
tr/// / y///
치환 연산자예요. 문자 목록을 다른 문자 목록으로 변환해요.
truncate FILEHANDLE,LENGTH / truncate EXPR,LENGTH
파일을 지정한 길이로 자르거나 늘려요.
uc EXPR / uc
문자열을 대문자로 변환해요.
ucfirst EXPR / ucfirst
문자열의 첫 글자만 대문자로 변환해요.
umask EXPR / umask
파일 생성 마스크를 설정하거나 가져와요.
undef EXPR / undef
값을 undef로 만든 다음 그 값을 반환해요. 인수가 없으면 undef를 반환해요.
unlink LIST
파일을 제거해요. 성공적으로 제거한 파일 수를 반환해요.
unpack TEMPLATE,EXPR
pack의 반대예요. 이진 구조를 리스트로 풀어요.
unshift ARRAY,LIST
배열 앞에 요소를 추가해요.
untie VARIABLE
변수와 클래스의 묶음을 풀어요.
use Module VERSION LIST
모듈을 로드하고 import해요.
utime LIST
파일의 접근·수정 시각을 설정해요.
values HASH
해시의 값 목록을 반환해요.
vec EXPR,OFFSET,BITS
문자열을 비트 벡터로 다뤄요.
wait
자식 프로세스가 종료되기를 기다려요. 종료한 자식의 PID를 반환해요.
waitpid PID,FLAGS
특정 자식 프로세스의 종료를 기다려요.
wantarray
호출된 컨텍스트가 리스트·스칼라·void 중 무엇인지 반환해요.
warn LIST
표준 오류에 메시지를 출력해요. 프로그램은 종료하지 않아요.
write FILEHANDLE / write
형식(format)에 따라 레코드를 출력해요.
END / DATA
이후의 텍스트를 프로그램으로 처리하지 않도록 해요. __DATA__ 뒤는 DATA 파일 핸들로 읽을 수 있어요.
FILE / LINE / PACKAGE / SUB / CLASS
컴파일 시각의 파일 이름·행·패키지·현재 서브루틴·현재 클래스 이름을 반환하는 토큰이에요.