SlideShare a Scribd company logo
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) 한줄씩 실행하면서 워닝에서 멈춤
Ad

Recommended

Perl Script
Perl Script
오석 한
 
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.
ssuser6dd171
 
자바모델 클래스에 날개를달자_롬복(Lombok)
자바모델 클래스에 날개를달자_롬복(Lombok)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
동작 파라미터와 람다 In java 8
동작 파라미터와 람다 In java 8
진우 이
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스
유석 남
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5
Ji Hun Kim
 
자바8강의 0강. java8 overview
자바8강의 0강. java8 overview
Sejong Park
 
JDK 변천사
JDK 변천사
SeungHyun Eom
 
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3주차. stream api advance
3주차. stream api advance
Sejong Park
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
Yong Joon Moon
 
자바 8 학습
자바 8 학습
HeeChang Lee
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
Yong Joon Moon
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
진수 정
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
ETRIBE_STG
 
자바8 람다식 소개
자바8 람다식 소개
beom kyun choi
 
PHP 기초 문법
PHP 기초 문법
Yoonwhan Lee
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
Booseol Shin
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식 지앤선
daewon jeong
 
Javascript 교육자료 pdf
Javascript 교육자료 pdf
Hyosang Hong
 
php 시작하기
php 시작하기
Yoonwhan Lee
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
MIN SEOK KOO
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개
Sungchul Park
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 
자바스크립트 함수
자바스크립트 함수
유진 변
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API
Sejong Park
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장
Software in Life
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
Yong Joon Moon
 
Sman2kis
Sman2kis
muhammadys
 
Linux tips
Linux tips
오석 한
 

More Related Content

What's hot (20)

(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
(스프링초보자를위한)스프링 컨텍스트 설정과 관련된 어노테이션
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
3주차. stream api advance
3주차. stream api advance
Sejong Park
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
Yong Joon Moon
 
자바 8 학습
자바 8 학습
HeeChang Lee
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
Yong Joon Moon
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
진수 정
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
ETRIBE_STG
 
자바8 람다식 소개
자바8 람다식 소개
beom kyun choi
 
PHP 기초 문법
PHP 기초 문법
Yoonwhan Lee
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
Booseol Shin
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식 지앤선
daewon jeong
 
Javascript 교육자료 pdf
Javascript 교육자료 pdf
Hyosang Hong
 
php 시작하기
php 시작하기
Yoonwhan Lee
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
MIN SEOK KOO
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개
Sungchul Park
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 
자바스크립트 함수
자바스크립트 함수
유진 변
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API
Sejong Park
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장
Software in Life
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
Yong Joon Moon
 
3주차. stream api advance
3주차. stream api advance
Sejong Park
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
Yong Joon Moon
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
진수 정
 
Javascript 완벽 가이드 정리
Javascript 완벽 가이드 정리
ETRIBE_STG
 
자바8 람다식 소개
자바8 람다식 소개
beom kyun choi
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
Booseol Shin
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식 지앤선
daewon jeong
 
Javascript 교육자료 pdf
Javascript 교육자료 pdf
Hyosang Hong
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
MIN SEOK KOO
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개
Sungchul Park
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 
자바스크립트 함수
자바스크립트 함수
유진 변
 
자바8강의 2강. Stream API
자바8강의 2강. Stream API
Sejong Park
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장
Software in Life
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
Yong Joon Moon
 

Viewers also liked (17)

Sman2kis
Sman2kis
muhammadys
 
Linux tips
Linux tips
오석 한
 
Vi 단축키명령어
Vi 단축키명령어
오석 한
 
정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약
오석 한
 
Project analysis
Project analysis
guest898cc4
 
Ceramic molding process
Ceramic molding process
GuruNanak Institutions Technical Campus(GNITC)
 
Functional progrmming with scala
Functional progrmming with scala
오석 한
 
Smart work
Smart work
오석 한
 
예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법
오석 한
 
JAVA NIO
JAVA NIO
오석 한
 
Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)
오석 한
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용
오석 한
 
Cassandra
Cassandra
오석 한
 
Smart Phone CPU
Smart Phone CPU
오석 한
 
RPC protocols
RPC protocols
오석 한
 
Vi 단축키명령어
Vi 단축키명령어
오석 한
 
정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약
오석 한
 
Project analysis
Project analysis
guest898cc4
 
Functional progrmming with scala
Functional progrmming with scala
오석 한
 
예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법
오석 한
 
Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)
오석 한
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용
오석 한
 
Smart Phone CPU
Smart Phone CPU
오석 한
 
Ad

Similar to Perl Script Document (20)

Shellscript_doc.pdf
Shellscript_doc.pdf
ssuser6d2d9b
 
정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)
Sunyoung Kim
 
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
Lee Sang-Ho
 
파이썬 기본 문법
파이썬 기본 문법
SeongHyun Ahn
 
파이썬 언어 기초
파이썬 언어 기초
beom kyun choi
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
Jaejin Yun
 
Python3 brief summary
Python3 brief summary
HoChul Shin
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
Yong Joon Moon
 
[NEXT 프연 Week2] UNIX 명령어 간단하게 살펴보기
[NEXT 프연 Week2] UNIX 명령어 간단하게 살펴보기
Young-Ho Cho
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
SeongHyun Ahn
 
Light Tutorial Python
Light Tutorial Python
Kwangyoun Jung
 
20160126_python
20160126_python
Na-yeon Park
 
Python
Python
J J
 
파이썬 기초
파이썬 기초
Yong Joon Moon
 
0327.web&ruby&rails
0327.web&ruby&rails
민정 김
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기
Yong Joon Moon
 
18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리
Changwon National University
 
[170327 1주차]C언어 A반
[170327 1주차]C언어 A반
arundine
 
Ruby - 6th (루비 6장 변수와 식)
Ruby - 6th (루비 6장 변수와 식)
재영 이
 
Shellscript_doc.pdf
Shellscript_doc.pdf
ssuser6d2d9b
 
정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)
Sunyoung Kim
 
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
Lee Sang-Ho
 
파이썬 기본 문법
파이썬 기본 문법
SeongHyun Ahn
 
파이썬 언어 기초
파이썬 언어 기초
beom kyun choi
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
Jaejin Yun
 
Python3 brief summary
Python3 brief summary
HoChul Shin
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
Yong Joon Moon
 
[NEXT 프연 Week2] UNIX 명령어 간단하게 살펴보기
[NEXT 프연 Week2] UNIX 명령어 간단하게 살펴보기
Young-Ho Cho
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
SeongHyun Ahn
 
Python
Python
J J
 
파이썬 기초
파이썬 기초
Yong Joon Moon
 
0327.web&ruby&rails
0327.web&ruby&rails
민정 김
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기
Yong Joon Moon
 
18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리
Changwon National University
 
[170327 1주차]C언어 A반
[170327 1주차]C언어 A반
arundine
 
Ruby - 6th (루비 6장 변수와 식)
Ruby - 6th (루비 6장 변수와 식)
재영 이
 
Ad

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) 한줄씩 실행하면서 워닝에서 멈춤