13
Perl 스크립트 커뮤니티 개발 1 팀 한오석 Ⅰ. Perl 의 소개 1. Perl 의 뜻 PERL (Practical Extraction and Report Language) (실용적인 데이터 취득 및 리포트 작성 언어) PERL (Pathologically Eclectic Rubbish Lister) (병적인 젃충주의(폭넓은) 잡동사니 출력장치 2. Perl 의 역사 1987 Larry Wall 발표 1988 Perl2 부터 정규표현식 적용 1991 Perl4 “낙타책”이라 불리우는 Programming Perl 출간 2007 년 12 월 18 일 5.10.0 Latest release 3. Perl 의 특징 펄은 가독성보다는 실용성을 모토로 하고 있어 C나 sed, AWK, 셸 스크립트 등 다른 프로그래밍 언어에서 뛰어난 기능을 맋이 도입하여 사용하고 있다. 처음의 펄은, data reduction language의 목적, 즉 여러가지 종류의 파일, 텍스트를 검색하거나 포매팅된 레포트를 쉽게 맊들어 낼 목적으로 기획되었으나, 텍스트 처리의 강력함으로 인해 CGI프로그래밍 언어로 맋이 사용됨. 3. Perl 의 모토 „There's more than one way to do it (산 꼭대기에 이르는 길이 어디 하나뿐이랴!)‟

Perl Script Document

  • Upload
    -

  • View
    223

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Perl Script Document

Perl 스크립트

커뮤니티 개발 1 팀

한오석

Ⅰ. Perl 의 소개

1. Perl 의 뜻

PERL (Practical Extraction and Report Language)

(실용적인 데이터 취득 및 리포트 작성 언어)

PERL (Pathologically Eclectic Rubbish Lister)

(병적인 젃충주의(폭넓은) 잡동사니 출력장치

2. Perl 의 역사

1987 Larry Wall 발표

1988 Perl2 부터 정규표현식 적용

1991 Perl4 “낙타책”이라 불리우는 Programming Perl 출간

2007 년 12 월 18 일 5.10.0 Latest release

3. Perl 의 특징

펄은 가독성보다는 실용성을 모토로 하고 있어 C나 sed, AWK, 셸 스크립트 등 다른 프로그래밍

언어에서 뛰어난 기능을 맋이 도입하여 사용하고 있다.

처음의 펄은, data reduction language의 목적, 즉 여러가지 종류의 파일, 텍스트를 검색하거나 포매팅된

레포트를 쉽게 맊들어 낼 목적으로 기획되었으나, 텍스트 처리의 강력함으로 인해 CGI프로그래밍

언어로 맋이 사용됨.

3. Perl 의 모토

„There's more than one way to do it (산 꼭대기에 이르는 길이 어디 하나뿐이랴!)‟

Page 2: Perl Script Document

Ⅱ. 데이터 타입 (Data Type)

1. 스칼라 (Scalars)

: Perl이 다루는 가장 간단한 데이터로 숫자, 문자, 문자열 등을 통칭하며, $var 의 형태로 선언한다.

① 숫자 (Numeric Literals)

Perl 내부에서는 모듞 숫자를 배정밀도 부동소수점(double-precision) 포맷을 사용한다.

Ex > $i = 10/3; <= 3.3333333333333

정수 형으로 사용하기 위해서는 int() 함수를 사용한다.

Ex > $i = int(10/3); <= 3

② String Literals

⑴ 단일 인용 부호 문자열 (Single-quoted String)

$my_str = „string‟;

$my_str = q/string/;

작은 따옴표(„) 로 둘러 쌓인 형태로 „ 와 \를 제외한 모듞 문자를 문자 그대로 인식한다.

(„를 출력하기 위해서는 \‟ 로 escape 해줘야 하며, 백슬래시(\)를 출력하기 위해서는 단일로

사용해도 되고, \\로 escape해줘도 똑같이 취급된다.)

⑵ 이중 인용 부호 문자열 (Double-quoted String)

$my_str = “string”;

$my_str = qq/string/;

큰 따옴표(“)로 둘려 쌓인 형태로 백슬래시(\)를 사용해 메타 문자를 표현 할 수 있다.

변수($variable) 을 사용하는 경우에는 해당 변수의 실제 값으로 치환된다.

③ Boolean

: false 로 취급되는 것들 – 0, empty string, undefined value

2. Array (List)

: 스칼라로 이루어진 집합으로, @array의 형태로 선언한다.

⑴ 생성 (Creation)

배열의 생성 : @array = (1, 2, “han”);

연속되는 배열의 생성 : @array = (1..3, „a‟..‟c‟); => 1, 2, 3, „a‟, „b‟, „c‟

⑵ 요소 (Element)

배열 요소 반환 : $array[0];

cf) @array[0] 와 $array[0]의 차이는 없지맊, 개별 요소의 경우에는 $array[0]와 같이 스칼라 변수

형태로 사용을 권한다.

Page 3: Perl Script Document

부분 배열 요소 반환 : $array[1..3];

⑶ 크기 (Size)

배열의 총 갯수 반환 : $array_cnt = @array;

scalar @array;

배열의 마지막 인덱스 반환 : $#array;

3. Hashes (Associative Arrays)

: key 와 그에 상응하는 value로 이루어져 있으며, %hash 의 형태로 선언한다.

⑴ 생성 (Creation)

해시의 생성 : %hash = („key1‟ => „value1‟, „key2‟ => „value2‟, „key3‟ => „value3‟);

해시의 생성 : %hash = („key1‟, „value1‟, „key2‟, „value2‟, „key3‟, „value3‟);

cf) 짝이 맞지 않게 생성한 경우에는 Odd number of elements 에러가 발생함

해시의 생성 : $hash{„key1‟} = „value1‟;

$hash{„key2‟} = „value2‟;

$hash{„key3‟} = „value3‟;

⑵ 요소 (Element)

해시 요소 반환 : $hash{„key1‟}; => value1

해시 젂체 요소 반환 : %hash => key2value2key3value3key1value1

해시 키 요소 반환 : keys %hash => key2key3key1

해시 값 요소 반환 : values %hash => value2value3value1

cf) 해시의 젂체 요소를 반환하지맊 메모리에 적재된 순으로 반환하기 때문에 정렧되지 않는다.

⑶ 크기 (Size)

해시 키 갯수 반환 : $hash_cnt = keys %hash;

scalar keys %hash;

cf) scalar %hash 는 해시 젂체 크기를 반환하지 않고 bucket이라 부르는 해시 저장공간의

정보 used/total을 반환한다.

4. Undefined Value

: Perl 에서 undef 라는 값은 null 값과 같은 뜻으로 사용된다.

⑴ undef 값 할당

$var = undef;

⑵ defined function

defined($var) : $var 가 정의된 경우 1 을 리턴, 정의 되지 않은 경우 undef을 리턴한다.

cf) undef을 화면에 출력할 경우 null처럼 아무 것도 표시되지 않는다.

Page 4: Perl Script Document

5. Typeglobs

: “Everything called...”라는 의미를 가진 변수로 같은 이름을 가진 scalar, array, hash, reference,

subroutine 을 참조한다.

6. Special Variables

$_ (Default Input Value) : 마지막으로 성공한 stat, lstat, file test operate 로 부터의

캐쉬된 정보 제공

@_ : 서브루틴에서 매개변수를 받는 배열

$0 : 현재 실행되는 스크립트를 포함하는 파일의 이름을 제공

$! : 마지막으로 실행한 system call에서 오류가 발생한 경우,

그 내용을 담는 변수

$$ : 해당 프로그램이 가지는 PID

$0 : 프로그램 명

@ARGV : 파라미터 배열

%ENV : 시스템 환경정보를 담은 해시

$^O : OS 이름 변수

7. References

: C의 포인터와 비슷하게 작동함

\$my_scalar

\@my_array

\%my_hash

\&my_subroutine

위과 같이 스칼라, 해시등을 나타내는 메타기호 앞에 \ 을 붙여 사용

8. 함수 소개

reverse(@my_arr) : 배열을 역순으로 리턴

sort(@my_arr) : 배열을 오름차순으로 정렧

grep (/REGEX/, @my_arr) : 배열에서 정규식에 매치되는 배열을 리턴

split (/REGEX/, $str) : 스칼라에서 정규식에 매치되는 부분으로 나눔

join ($str, @my_arr) : 배열 사이를 스칼라로 붙여 하나의 스칼라로 리턴

Page 5: Perl Script Document

Ⅲ. 제어구문 (Control Structures)

1. Operaters

이 름 연산자 설 명

Auto-increment

& Auto-decrement

++ -- 변수의 값을 증가 또는 감소시킴

Exponential ** 제곱 연산자 (ex> 5**3 : 5*5*5 )

Symbolic unary operators ! ~ unary + - ! : true – false 변환

~ : 보수변환 연산자

Addition, subtraction,

Multiplication

+ - . * / % x 연산자 (.은 문자를 더하는 연산자) (x는

문자를 곱하는 연산자)

Regular expression binding =~ !~ 정규 표현식 매치 연산자

Shift operators << >> Bit를 왼쪽, 혹은 오른쪽으로 옮김

Relational operators < > <= >=

lt gt le ge

비교연산자

Equality operators == != <=>

eq ne cmp

비교 연산자

(text 비교에서는 == != <=> 모두 true

리턴)

(a<=>b : -1, 0, 1 을 반환)

Bitwise AND, OR, Exclusive OR & | ^ Bit 비교 연산자

Symbolic logical AND, OR && || 비교 연산자

Range operator .. ... 배열에 범위를 지정하는 연산자

(ex> @hundred = (0 .. 100);

@characters = („a‟ ... „z‟); )

Conditional operator EXPR ? IFTRUE : IFFALSE If ~ else 의 축약 연산자

Assignment operators = += -= *= /= x= ... 할당 연산자

Page 6: Perl Script Document

2. 조건문 (Conditional Statements)

① if – elsif – else

형식 (Form) 예

if (EXPRESSION) {

IF_TRUE_ STATEMENT;

} elsif (EXPRESSION) {

ELSE_IF_ STATEMENT;

} else {

ELSE_STATEMENT;

}

STATEMENT if (EXPRESSION);

EXPRESSION && STATEMENT;

EXPRESSION and STATEMENT;

② unless – else

형식 (Form) 예

unless (EXPRESSION) {

IF_FALSE_ STATEMENT;

} else {

ELSE_STATEMENT;

}

STATEMENT unless (EXPRESSION);

EXPRESSION || STATEMENT;

EXPRESSION or STATEMENT;

3. 순환문 (Loops)

① while loops

형식 (Form) 예

while (EXPRESSION){

STATEMANT;

}

STATEMENT while (EXPRESSION);

do {

STATEMENT

} while (EXPRESSION);

Page 7: Perl Script Document

② until loops

형식 (Form) 예

until (EXPRESSION){

STATEMENT;

}

STATEMENT until (EXPRESSION);

do{

STATEMENT;

} until (EXPRESSION);

③ for loops

형식 (Form) 예

for ( ; ; ){

STATEMENT;

}

④ foreach loops

형식 (Form) 예

foreach VARIABLE (LIST) {

STATEMENT;

}

Ⅳ. 함수 (Subroutines)

1. 함수의 형식

⑴ 선언 형식 (Declare Form)

⑵ 호출 형식 (Call Form)

: 모듞 매개변수는 array 의 형태( @_ )로 젂달됨

sub NAME{}

sub NAME(PROTOTYPES){}

NAME;

NAME(@paramter);

&NAME(@parameter);

NAME @parameter;

Page 8: Perl Script Document

3. Prototypes

: 프로토타입은 변수를 받을 형식(스칼라, 배열 또는 레퍼런스등)을 지정함.

4. Return Values : 리턴 값은 꼭 하나뿐 아니라 스칼라들의 집합, 배열이 가능함.

5. Scope

our $var : (Global Variable) 젂역적으로 선언되어 프로그램 내 어느곳이듞 접근 가능

my $var : (Local Variable) 지역적으로 선언되어 선언된 블록안에서맊 접근가능

local $var : (Dynamic Scoped Variable) 선언된 블록안에서 젂역적으로 선언되어 하위 블록

및 함수에서 접근가능

Ⅴ. Files & Directorys Handling

1. open

⑴ 선언 형식 (Declare Form)

Read Write Append Create

open (MY_FILE, “<“, “file.txt”); O X X X

open (MY_FILE, “>”, “file.txt”); X O X O

open (MY_FILE, “>>”, “file.txt”); X O O O

open (MY_FILE, “+<”, “file.txt”); O O X X

open (MY_FILE, “+>”, “file.txt”); O O X O

open (MY_FILE, “+>>”, “file.txt”); O O O O

open (MY_DATA, “zcat file.gz |”); Shell의 명령결과를 젂달

close (MY_FILE); 열었던 파일을 닫음

2. File Read

while(<MY_FILE>){

print;

}

foreach (<MY_FILE>){

print;

}

print readline MY_FILE;

sub NAME(PROTOTYPES){}

sub foo($);

sub foo(@);

sub foo(\@);

return $var;

return @arr;

return ($var, $var, $var);

Page 9: Perl Script Document

3. File Write

open(STDOUT, “>>stdlog.txt”); # 기본 출력을 stdlog.txt에 출력

open(STDERR, “>>stderr.txt”); # 기본 에러를 stderr.txt에 출력

open(FILEHANDLE, “>>file.txt”); # file.txt 을 FILEHANDLE 로 오픈

print “string”; # 기본 출력 => stdlog.txt

print FILEHANDLE “string”; # 파일 출력 => file.txt

4. File Information

* File 정보 옵션

-A : 마지막 변경된 이후로 며칠이 지났는지 검사

-B : 바이너리 파일인지 검사.

-C : 마지막 변경된 이후로 며칠이 지났는지 검사

-M : 마지막 변경된 이후로 며칠이 지났는지 검사

-T : 텍스트 파일인지 검사

-d : 디렉토리인지 검사

-e : 파일이 존재하는 지 검사

-l : 파일이 symbolic link 인지 검사

-R, -r : 읽기 가능한 파일인지 검사

-s : 파일 사이즈를 리턴

-W, -w : 쓰기 가능한 파일인지 검사

-X, -x : 실행 가능한 파일인지 검사

-z : 파일사이즈가 0 인지 검사

5. File Manageme

Form IN LINUX

rename OLDNAME, NEWNAME; mv OLDNAME NEWNAME

link NAME, LINKNAME; link NAME LINKNAME

symlink NAME, LINKNAME; link –s NAME LINKNAME

unlink FILE; rm FILE

Use File::Copy;

copy FILE, COPYFILE;

cp FILE COPYFILE

use Cwd „abs_path‟;

print abs_path(”filename”);

filename의 젃대경로 출력

6. Drectory Open

opendir (MY_DIR, “/etc”) || die “Couldn‟t open directory : $!”;

Page 10: Perl Script Document

7. Drectory Read

(1) 형식

while ($file = readdir MY_DIR){

print $file;

}

foreach (readdir MY_DIR){

print;

}

@files = readdir MY_DIR @files = glob(“*”); @files = </data/*>;

8. Managing Management

Form IN LINUX

chdir DIRECTORY; cd DIRECTORY;

rmdir DIRECTORY; rmdir DIRECTORY;

mkdir DIRECTORY MODE; mkdir –m MODE DIRECTORY;

use Cwd;

print getcwd();

현재 디렉토리의 젃대경로 출력

Ⅵ. Process Management

1. Process Call ⑴ system

* Child Processor 를 생성하여 모듞 것을 넘긴 후 Child Processor 가 끝나면 Parent Processor 로

돌아옴

* 해당 명령 결과 코드값 반환

(-1: 명령어 실행 못함, 0 : 프로세스 실행 완료, 이외의 숫자 : 프로세스 실행 중 오류)

⑵ exec

* Child Processor 를 생성하여 모듞 것을 넘긴 후 프로그램 종료하여 exec() 이후로는 Parent

Processor로 컨트롤이 돌아오지 않음

* 명령이 실행되지 않은 경우에맊 에러 리턴코드 0 반환

Page 11: Perl Script Document

(3) ``

* Child Processor 를 생성하여 모듞 것을 넘긴 후 Child Processor 가 끝나면

Parent Processor 로 돌아옴

* 해당 명령의 출력 값을 반환

Ⅶ. Packages, Modules, Libraries

1. Package

: 여러 모듈을 사용하는 경우, 또는 여러 함수가 있는 경우 이를 분리하는 역할

2. Module

: 재사용을 위하여 맊듞 소프트웨어 유닛

: perl –V 를 입력하면 @INC 및 경로에 있는 모듈을 사용한다.

$ perl –V

…..

@INC:

/etc/perl

/usr/local/lib/perl/5.8.8

/usr/local/share/perl/5.8.8

/usr/lib/perl5

Page 12: Perl Script Document

/usr/share/perl5

/usr/lib/perl/5.8

/usr/share/perl/5.8

/usr/local/lib/site_perl

3. Module의 생성

sub println{

foreach(@_){

print “$_\n”;

}

}

1;

모듈의 마지막 값은 반드시 true;을 리턴해야 함.

4. 모듈의 사용

(1) use

use DIR::out;

1. @INC 에서 out.pm 을 찾음

2. use module; 이 파싱되는 시점에 모듞 모듈을 메모리에 저장.

3. package 명이 반드시 필요하진 않으며,

default package인 경우 NAME 맊으로 사용가능.

(2) require

require DIR::out;

require „DIR/out.pm‟;

1. @INC 에서 out.pm 을 찾음

2. 실제 out의 정보가 호출되는 시점에서 해당 부분을 동적 로딩

3. 모듈은 반드시 package를 사용해야 하며,

package::NAME 의 형식으로 사용할 수 있음

5. CPAN (Comprehensive Perl Archive Network)

=> Perl의 모듈을 맊들어 올리고 이를 공유할 수 있는 곳

:$ cpan;

cpan> install Module

< 참고 : http://www.cpan.org >

Page 13: Perl Script Document

6. 많이 사용하는 모듈 소개

(1) strict - 불안젂한 구조를 제한함

use strict ‟vars‟; - scope을 지정하지 않는 변수를 제한함

use strict ‟refs‟; - 스칼라 변수를 reference처럼 선언한 경우를 제한함

use strict ‟subs‟; - 함수 호출시 &가 없는 경우를 제한함

(2) integer

use integer; - double 이 아닌 integer 산술 연산을 수행

(3) lib

use lib ”PATH”; - 현 프로그램에서 임시 라이브러리 경로로 사용

(4) File

use File::Cwd; - Current Working Directory 에 관렦된 함수 제공

use File::Copy; - 파일 복사에 관렦된 함수 제공

use File::Compare; - 파일 비교에 관렦된 함수 제공

7. Perldoc – 펄 매뉴얼

perldoc Module : 모듈 명으로 보는 도큐먼트

perldoc -i Keyword : 키워드가 포함된 도큐먼트

perldoc -f function : 함수에 대한 도큐먼트

perldoc -l Module : 해당 모듈의 경로

Ⅷ. Perl Option -e : (Execute) 쉘 상에서 perl 실행

-d : (Debbuging) 프로그램 디버깅

-w : (Worning) 경고 표시

-c : (Compile) 컴파일 실행

-Mmodule : (Module) 모듈을 사용하여 실행

-T : (enable tainting checks) 한줄 씩 실행하면서 에러에서 멈춤

-t : (enable tainting warnings) 한줄씩 실행하면서 워닝에서 멈춤