Perl

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

Perl 언어를 정리 한다.

프로그램 문법

Perl 기초

내장 상수

상수/변수 선언

  • 변수(Variable)
  • 수치(number)
  • 문자열(string) : "파싱됨", '파싱 안됨'
  • scalar variable : 하나의 값을 가지는 변수
  • vector variable
  • Array (list) : @certain_list = ("abc", "def", "123");
  • Associative array (hash) : %another_special_hash = ( red => 0xf00, green => 0xf00 );
  • 특수한 변수(Special variable)
  • pattern match와 관련된 변수들은 지역변수(local special variable)임
  • use English; 을 선언해 주어야 사용할 수 있다.
  • $digit : $1, $2, $3, ... : 패턴 바깥에서, 매치(match)가 일어난 괄호 안의 substring을 지정할 때 사용되는 변수로 왼쪽 괄호'('의 순서대로 digit위치에 숫자가 사용된다.
  • digit : 1, 2, 3, ... : 패턴 안에서 사용되는 $digit형 변수와 같은 역할을 한다.
  • $& : $MATCH : 가장 마지막에 매치가 일어난 substring을 지정하는 변수
  • $` : $PREMATCH : $MATCH 앞쪽의 substring을 지정하는 변수
  • $' : $POSTMATCH : $MATCH 뒤쪽의 substring을 지정하는 변수
  • $+ :$LAST_PAREN_MATCH : 패턴 내의 가장 뒤쪽에 위치한 괄호 안의 substring을 지정하는 변수로 alternative matching 사용시 편리하다.
  • $* : $MULTILINE_MATCHING : default로 0의 값을 가지면서 single-line matching mode를 지정하고, 1의 값을 가지게 되면 multi-line matching mode를 지정한다.
  • Per-Filehandle 변수
  • use FileHandle;
  • $| : $OUTPUT_FLUSH_NUMBER : autoflush HANDLE EXPR : 값을 0이 아닌 값으로 지정하면, write또는 print문장 후에 fflush(3)함수를 호출하여 현재 선택된 output channel로 출력을 강제한다.
  • $% : $FORMAT_PAGE_NUMBER : format_page_nubmer HANDLE EXPR : 현재 선택된 output channel의 현재 page 번호이다.
  • $= : $FORMAT_LINES_PER_PAGE : format_lines_per_page HANDLE EXPR : 현재 선택된 output channel의 현재 page 길이(프린트 가능한 line의 수)이다.
  • $- : $FORMAT_LINES_LEFT : format_lines_left HANDLE EXPR : 현재 선택된 output channel의 남아있는 line의 수이다.
  • $~ : $FORMAT_NAME : format_name HANDLE EXPR : 현재 선택된 output channel의 현재 report format의 이름이다.
  • $~ : $FORMAT_TOP_NAME : format_top_name HANDLE EXPR : 현재 선택된 output channel의 현재 top-of-page format의 이름이다.
  • Global Special 변수
  • $_ : $ARG : default input string, standard input이나 첫 번째 argument로 넘겨진 파일을 읽을 때 넘겨져 오는 string을 의미한다.
  • $. : $INPUT_LINE_NUMBER $NR : 마지막으로 읽힌 filehandle의 현재 input line number이다. 여러 argument로 넘겨진 파일들을 구분하지 않으므로, 다른 파일로 바뀌더라도 line number가 계속 증가하게 된다.
  • $/ : $INPUT_RECORD_SEPARATOR $RS : input record를 구분해주는 string을 의미하며 default값은 newline character이다.
  • $, : $OUTPUT_FIELD_SEPARATOR $OFS : output field를 구분해주는 string이며, print 연산자에서 사용된다. 일반적으로는 comma(,)가 separator로 사용된다.
  • $ : $OUTPUT_RECORD_SEPARATOR $ORS : output record를 구분해주는 string으로서 보통은 print 연산자가 record뒤에 newline내지는 record separator을 찍어주지 않기 때문에 필요할 경우, 지정하여야 한다.
  • $" : $LIST_SEPARATOR : list의 구분자로 사용되는 string을 지정하는 변수이다. 기본 값으로 space가 지정되어 있다.
  • $; : $SUBSCRIPT_SEPARATOR $SUBSEP : 다차원 배열을 만들기 위해 list내에서 변수들을 나열할 경우, 그 변수들이 하나의 record로 인식되어야 하는데, 그것을 위해서 list내의 각 변수들을 join하는데 사용하는 변수이다.
  • $^L : $FORMAT_FORMFEED
  • format_formfeed HANDLE EXPR : print할 때, output의 format에서 formfeed로 사용될 string을 지정하는 변수로서, 기본 값은 "f"이다.
  • $: : $FORMAT_LINE_BREAK_CHARACTERS
  • format_line_break_characters HANDLE EXPR : 연속적인 field를 잘라야 하는 경우 그 기준이 되는 character의 집합을 정의하는 변수이다. default로 "n-", 다시 말해서 newline과 hyphen이 사용된다.
  • $^A : $ACCUMULATOR : format line을 위한 write accumulator의 현재 값을 지정하는 변수이다.
  • $# : $OFMT : Perl5에서는 사용되지 않는, 이전 버전과의 호환성을 위해 제공되는 변수로, 숫자를 출력하기 위한 output format을 지정하는 변수이다. 초기 값은 %.14g 이다.
  • $? : $CHILD_ERROR : 마지막 실행 문에서 return되는 status값이다. 상위 8비트는 child process의 exit value이고, 하위 8비트는 어떤 signal을 받았는지와 core dump가 일어났는지의 여부에 대한 정보를 포함한다.
  • $! : $OS_ERROR $ERRNO : error에 관한 정보를 포함하는 변수로서, 사용되는 문맥에 따라 error 번호 또는 error string을 보여주게 된다.
  • $@ : $EVAL_ERROR : eval 명령으로부터 발생하는 error message를 담는 변수이다. null로 값이 지정될 경우 성공적으로 실행되었음을 의미한다.
  • $$ : $PROCESS_ID $PID : 현재 script를 실행하고 있는 Perl프로그램의 process id(번호)를 지니고 있는 변수이다.
  • $< : $REAL_USER_ID $UID : 현재 process의 real user id(uid)를 지닌 변수로서, process를 실행시킨 사용자의 id를 의미한다.
  • $> : $EFFECTIVE_USER_ID $EUID : 현재 process의 effective user id(euid)를 지닌 변수로서, process의 원래 소유자의 id를 의미한다. 일반적인 process의 경우, uid와 같은 값을 가지지만, setuid bit가 켜져 있는 실행파일의 경우, uid는 실행자의 id로, euid는 파일 소유자의 것으로 지정된다.
  • $( : $REAL_GROUP_ID $GID : 현재 process의 real group id(gid)를 지정하는 변수이다.
  • $) : $EFFECTIVE_GROUP_ID $EGID : 현재 process의 effective group id(egid)를 지정하는 변수이다.
  • $0 : $PROGRAM_NAME : 현재 실행중인 Perl script의 이름을 지정하는 변수이다.
  • $[ : : 배열의 첫 번째 원소의 index, 또는 substring의 첫 번째 글자의 index를 지정하는 변수이다. 기본적으로는 0번 원소부터 배열이 시작하지만, 1번 원소부터 배열이 시작하도록 1로 값을 바꿀 수 있다.
  • $] : $PERL_VERSION : Perl의 version과 patch level을 알려주는 변수로서, 5.004는 5번째 version에 4번째 patch level임을 의미한다.
  • $^D : $DEBUGGING : debugging flag(-D switch)가 켜져 있는지에 관한 정보를 담고 있는 변수이다.
  • $^F : $SYSTEM_FD_MAX : 현재 open되어 사용되고 있는 file descriptor의 최대 번호를 지정하는 변수이다. 보통 프로그램이 시작하게 되면 자동으로 0, 1, 2번이 STDIN, STDOUT, STDERR로 설정된다.
  • $^H : : Perl compiler의 내부 컴파일 힌트에 관한 정보를 담는 변수이다.
  • $^I : $INPLACE_EDIT : inplace-edit extension의 값을 저장하는 변수이다. 이 값은 -i switch에 의해 지정된다.
  • $^O : $OSNAME : 현재 사용되고 있는 Operating System의 이름을 저장하는 변수이다.
  • $^P : $PERLDB : Perl debugger가 자신을 debug하지 않도록 꺼주는 내부 flag 변수이다.
  • $^T : $BASETIME : script가 실행되기 시작한 시각을 지정하는 변수이다. Unix system에서는 70년 1월 1일 0시 0분 0초(epoch)로부터의, 초단위 시간이다.
  • $^W : $WARNING : -w switch에 의해 지정되는 warning(경고) 여부의 값을 저장하는 변수이다.
  • $^X : $EXECUTABLE_NAME : Perl 바이너리가 실행 시에 가지게 되는 이름을 지정하는 변수이다.
  • $ARGV : : argument로 넘겨져 들어온 파일의 이름이다.
  • Global special array
  • @ARGV : 넘겨져 들어온 command-line argument의 list를 저장하는 변수이다.
  • @INC : do, require, use등의 operator를 사용할 때 필요한 Perl script를 찾는 디렉토리를 지정하는 변수이다. -I switch를 사용하여 지정된다. lib module을 사용하여도 지정 가능하다.
  • @F : -a switch를 사용한 경우에, input line을 분리해 넣어줄 변수의 array를 지정하는 list 변수이다.
  • %INC : module로 사용될 Perl script의 이름과 그 script의 절대경로를 저장해놓은 hash 변수이다.
  • %ENV : shell에서 넘겨져 온 hash type의 환경변수이다. 환경변수의 이름과 그 값을 hash해 놓았다.
  • %SIG : signal과 그에 해당하는 signal handler를 지정하는 hash 변수이다.
  • Global special Filehandles
  • ARGV : @ARGV에서 저장된 argument로 넘겨진 file들을 다루는 filehandle이다. 는 <>로 줄여서 사용 가능하다.
  • STDERR : standard error에 대한 filehandle이다.
  • STDIN : standard input에 대한 filehandle이다.
  • STDOUT : standard output에 대한 filehandle이다.
  • DATA : Perl script에서 __END__라는 token뒤쪽에 나오는 모든 자료에 대한 filehandle이다.
  • _(underline) : 마지막으로 다루었던 파일에 대한 정보를 cache로 저장하고 있는 filehandle이다.
  • 레퍼런스(reference)
$$arrayref[0] = "first";
${$arrayref}[0] = "first";
$arrayref->[0] = "first"; 

$$hashref{'key2'} = "McLean";
${$hashref}{'key2'} = "McLean";
$hashref->{'key2'} = "McLean";
  • 배열의 배열, 해시의 배열, 배열의 해시

객체 선언

연산자

조건문/반복문

오류 처리

기타 문법

입출력

전역 변수

표준 입출력

  • 표준 입력
  • $_는 default input string을 저장하는 변수로서 대개의 연산자에서 생략 가능하다.
$input = ;
@input = ;

print while
print $_ while definded($_ = );
  • 표준 출력
print "Hello worldn";

print OUTPUT << EOF
But most of payload are lost. 
Estimation of loss are still being carried.
EOF

print << `ANYTOKEN`
echo hello         //--- 이문장이 실행됨
ANYTOKEN
  • 에러 출력
print STDERR "Can't find such a file!n";

브라우저 입출력

Cookie 입출력

세션 입출력

데이터베이스 입출력

파일 입출력

메일 입출력

Perl Framework

관련 자료

관리자 매뉴얼

Debug

모니터링 및 튜닝

참고 문헌