SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
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 (산 꼭대기에 이르는 길이 어디 하나뿐이랴!)‟
Ⅱ. 데이터 타입 (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]와 같이 스칼라 변수
형태로 사용을 권한다.
 부분 배열 요소 반환 : $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처럼 아무 것도 표시되지 않는다.
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) : 배열 사이를 스칼라로 붙여 하나의 스칼라로 리턴
Ⅲ. 제어구문 (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= ... 할당 연산자
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);
② 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;
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);
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 : $!”;
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 반환
(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
/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 >
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) 한줄씩 실행하면서 워닝에서 멈춤

Weitere ähnliche Inhalte

Was ist angesagt?

Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
ETRIBE_STG
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
daewon jeong
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
유진 변
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
Software in Life
 

Was ist angesagt? (20)

(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
 
3주차. stream api advance
3주차. stream api advance 3주차. stream api advance
3주차. stream api advance
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
PHP 기초 문법
PHP 기초 문법PHP 기초 문법
PHP 기초 문법
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
php 시작하기
php 시작하기php 시작하기
php 시작하기
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개자바8 람다 나머지 공개
자바8 람다 나머지 공개
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API자바8강의 2강. Stream API
자바8강의 2강. Stream API
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
 

Andere mochten auch

정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약
오석 한
 
Project analysis
Project analysisProject analysis
Project analysis
guest898cc4
 

Andere mochten auch (17)

Sman2kis
Sman2kisSman2kis
Sman2kis
 
Linux tips
Linux tipsLinux tips
Linux tips
 
Vi 단축키명령어
Vi 단축키명령어Vi 단축키명령어
Vi 단축키명령어
 
정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약
 
Ceramic molding process
Ceramic molding processCeramic molding process
Ceramic molding process
 
Project analysis
Project analysisProject analysis
Project analysis
 
Ceramic molding process
Ceramic molding processCeramic molding process
Ceramic molding process
 
Functional progrmming with scala
Functional progrmming with scalaFunctional progrmming with scala
Functional progrmming with scala
 
Smart work
Smart workSmart work
Smart work
 
예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법
 
JAVA NIO
JAVA NIOJAVA NIO
JAVA NIO
 
Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)
 
Mg and its alloys
Mg and its alloysMg and its alloys
Mg and its alloys
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용정규표현식의 이해와 활용
정규표현식의 이해와 활용
 
Cassandra
CassandraCassandra
Cassandra
 
Smart Phone CPU
Smart Phone CPUSmart Phone CPU
Smart Phone CPU
 
RPC protocols
RPC protocolsRPC protocols
RPC protocols
 

Ähnlich wie Perl Script Document

파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
Yong Joon Moon
 

Ähnlich wie Perl Script Document (20)

Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3
 
PHP 7의 새로운 특징과 기능 요약
PHP 7의 새로운 특징과 기능 요약PHP 7의 새로운 특징과 기능 요약
PHP 7의 새로운 특징과 기능 요약
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
Whatischef korean
Whatischef koreanWhatischef korean
Whatischef korean
 
What is chef - korean
What is chef - koreanWhat is chef - korean
What is chef - korean
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
Apache avro
Apache avroApache avro
Apache avro
 
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
 
log-monitoring-architecture.pdf
log-monitoring-architecture.pdflog-monitoring-architecture.pdf
log-monitoring-architecture.pdf
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 
Java script
Java scriptJava script
Java script
 
5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)
 
Working with code
Working with codeWorking with code
Working with code
 
Scalability
ScalabilityScalability
Scalability
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
Kubernetes & helm 활용
Kubernetes & helm 활용Kubernetes & helm 활용
Kubernetes & helm 활용
 
Ch.14 파일 강c v0.6
Ch.14 파일 강c v0.6Ch.14 파일 강c v0.6
Ch.14 파일 강c v0.6
 
PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기
 

Perl Script Document

  • 1. 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 (산 꼭대기에 이르는 길이 어디 하나뿐이랴!)‟
  • 2. Ⅱ. 데이터 타입 (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]와 같이 스칼라 변수 형태로 사용을 권한다.
  • 3.  부분 배열 요소 반환 : $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처럼 아무 것도 표시되지 않는다.
  • 4. 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) : 배열 사이를 스칼라로 붙여 하나의 스칼라로 리턴
  • 5. Ⅲ. 제어구문 (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= ... 할당 연산자
  • 6. 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);
  • 7. ② 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;
  • 8. 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);
  • 9. 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 : $!”;
  • 10. 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 반환
  • 11. (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
  • 12. /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 >
  • 13. 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) 한줄씩 실행하면서 워닝에서 멈춤