SlideShare ist ein Scribd-Unternehmen logo
1 von 69
Downloaden Sie, um offline zu lesen
1
Perl Script
한오석, 커뮤니티SU, 커뮤니티개발1팀 2008-09-25
2
2부 : Perl script 의 심화1부 : Perl script 의 기초
목 차
 File, Directory Access
 Process
 Package, Modules
 Database, Socket
 Introduction
 Let’s Start Perl!
 Data type
 Control Statement
 Subroutines
3
Introduction - Meaning
Extracting information from text files, and printing reports based on that information
4
Introduction - Meaning
5
Introduction - History
History
Bell Labs – pipe concept => $_
C - && || ++ --
Perl1 - Larry Wall
Perl2 – Regular Expression
Perl4 – “Camel” book
CPAN
Perl5.10 (café 5.8.5)
http://www.perl.org http://www.perl.com
6
Introduction - Moto
7
Let’s Start Perl !
(@ARGV)
;
Good afternoon Oseok
Good afternoon KyungBo
Good afternoon JongHyeop
8
Data Type
데이터타입
스칼라 배열 해시 레퍼런스 IO 함수
9
Data Type – Scalar
1. 숫자 (Numeric Literals)
$num = 10; # integer
$num = 3.14; # floating point
* Perl 내부에서는 모든 숫자를 배정밀도 부동소수점
(double-precision)포맷을 사용한다.
$i = 10/3;
print $i;
$i = 3.0000000;
print $i;
$i = int(10.3);
print $i;
33.33333333333333 3
10
Data Type – Scalar
2. 문자 (String Literals)
$my_str = string; # 문자+숫자로맊 이루어진 경우 사용 가능
$my_str = „string‟; # Single-quoted String
$my_str = q/string/; (변수, 특수문자 파싱할 수 없음)
$my_str = “string”; # Double-quoted String
$my_str = qq/string/; ( 변수, 특수문자 파싱됨 )
$hi = Hi;
$my_str = ‟‟$hi! Comm‟‟;
print $my_str;
$hi = Hi;
$mt_str = qq/”$hi! Comm”/;
print $mt_str;
„$hi! Comm‟ “Hi! Comm”
11
Data Type – Scalar
2. 문자 (String Literals)
length($my_str); # 문자의 길이를 리턴
substr($my_str, 3, 4); # $str 3번째 문자부터 4개의 문자열을 맊듬
$my_str = “Hello”;
$my_cnt = length($my_str);
print $my_cnt;
$my_str = “Hello”;
$my_substr = substr($my_str, 2, 2);
print $my_substr;
5 ll
12
Data Type – Scalar
3. 정의 되지 않은 값
$nothing = undef; # null 처럼 아무 값도 정의 되지 않음
defined($var); # 변수가 정의 되어 있는지 리턴
$my_var = “value”;
$my_undef = undef;
$my_noinit;
print „$my_var = „, defined($ my_var ), “n”;
print „$my_undef= „, defined($my_undef ), “n”;
print „$my_noinit = „, defined($ my_noinit), “n”;
$my_var = 1
$my_undef =
$my_noinit =
13
Data Type – Scalar
4. 메모리 해제
undef $var;
print „$var = „, $var, “n”;
$var= “value”;
print „$var = „, $var, “n”;
undef $var;
print „$var = „, $var, “n”;
Use of uninitialized value in print at ./deftest.pl line 3.
$var =
$var = value
Use of uninitialized value in print at ./deftest.pl line 7.
$var =
14
Data Type – Scalar
5. Boolean – false 로 취급되는 것들
- 0
- undef
- Empty String
- Empty Array
- Empty Hash
15
Data Type – Array
1. 배열의 생성 (Creation)
@my_array = (1, 2, com); # comma로 구분
@my_array = (1..2, a..c); # 1,2,a,b,c
@my_array = qw/1 2 com/; # 빈칸으로 구분
2. 배열의 요소 (Elements)
$my_array[0];
@my_array[0..2];
* $my_array[0] 와 @my_array[0]의 차이는 없지맊, 개별요소의 경우에는
스칼라 변수의 형태로 사용을 권장.
16
Data Type – Array
3. 배열의 크기 (Size)
$my_array_cnt = @my_array; # 배열의 총 개수
scalar @my_array; # 배열의 총 개수
@#my_array; # 배열의 마지막 인덱스
4. 요소의 추가 및 추출
push @my_array $var;
pop @my_array; # 배열의 마지막 요소 리턴
shift @my_array; # 배열의 첫 요소 리턴
17
Data Type – Hash
1. 해시의 생성 (Creation)
%my_hash = („key1‟ => „value1‟,
„key2‟ => „value2‟,
„key3‟ => „value3‟);
%my_hash = qw/key1 value1 key2 value2 key3 value3/;
$my_hash{„key1‟} = „value1‟;
$my_hash{„key2‟} = „value2‟;
$my_hash{„key3‟} = „value3‟;
* 짝이 맞지 않게 생성된 경우에는 Odd number of elements 에러 발생
18
Data Type – Hash
2. 해시의 요소(Elements)
$my_hash{„key1‟}; # 단일 요소 value1
%my_hash; # 젂체 요소 key2value2key1value1…
keys %my_hash # 해시 키 요소 key2key3key1
values %my_hash # 해시 값 요소 value2value3value1
3. 해시의 크기 (Size)
$my_hash_cnt = keys %my_hash; # 해시 키의 총 개수
scalar values %my_hash; # 해시 값의 총 개수
* scalar %my_hash 는 해시 젂체 크기를 반환하지 않고 bucket이라 부르는 해
시 저장공간의 정보 used/total을 반환한다.
19
Data Type – References
1. Reference
: C언어의 포인터와 비슷하게 작동함
$r = $x; 와 같은 형식은 reference를 수정할 수 없다는 오류
(Can't modify single ref constructor) 발생
$my_scalar
@my_array
%my_hash
&my_subroutine
$x : 10, $$r : 10
$x = 5;
$r = $x;
$$r = 10;
printf ('$x : %d, $$r : %d', $x, $$r);
20
Symbol Table
Data Type – References
2. Typeglob
$t_glob = “scalar”;
@t_glob = (arr1..arr3);
%t_glob = qw/k1 v1 k2 v2 k3 v3/;
sub t_glob{
print @_, “n”;
}
scalar
arr1arr2arr3
k2v2k1v1k3v3
*c_glob = *t_glob;
&c_glob($c_glob);
&c_glob(@c_glob);
&c_glob(%c_glob);
Typeglob Data
$t_glob
@t_glob
%t_glob
&t_glob
$c_glob
@c_glob
%c_glob
&c_glob
Typeglob
(t_glob)
Typeglob
(c_glob)
*c_glob = *t_glob;
21
Data Type – References
2. Typeglob
c_scalar
c_arr1c_arr2c_arr3
c_k2c_v2c_k1c_v1c_k3c_v3
$t_glob = “scalar”;
@t_glob = (arr1..arr3);
%t_glob = qw/k1 v1 k2 v2 k3 v3/;
sub t_glob{
print @_, “n”;
}
*c_glob = *t_glob;
&c_glob($c_glob);
&c_glob(@c_glob);
&c_glob(%c_glob);
$c_glob = “c_scalar”;
@c_glob = (c_arr1..c_arr3);
%c_glob = qw/c_k1 c_v1 c_k2 c_v2 c_k3 c_v3);
&t_glob($t_glob);
&t_glob(@t_glob);
&t_glob(%t_glob);
scalar
arr1arr2arr3
k2v2k1v1k3v3
22
Data Type – Special Variable
특수 변수의 종류
Default Input Value$_
마지막으로 실행한 system call에서 오류가
발생한경우, 그 내용을 담는 변수
$!
서브루틴에서 매개변수를 받는 배열@_
해당 프로그램이 가지는 Process ID 변수$$
23
Data Type – Special Variable
특수 변수의 종류
프로그램 명$0
파라미터 배열@ARGV
시스템 환경정보를 담은 해시 (env)%ENV
OS 이름 변수 (linux)$^O
24
Standard IO
1. STDIN – 키보드 입력
chomp; - n 맊을 제거
chop; - 마지막 문자를 제거
$input = <>;
$input = <STDIN>;
@input = <>;
25
Standard IO
2. STDOUT – 화면 출력
– 파일 핸들러로 사용 가능
3. STDERR – 화면 출력
– 파일 핸들러로 사용 가능
print STDOUT “out string”;
print “out string”;
26
Functions
데이터 취급에 관렦된 함수들
use constant PI =>3.14;
상수 선언
reverse (@my_arr)
배열을 역순으로 리턴
sort (@my_arr)
배열을 정렧
배열을 역순으로 정렧하려면 ?
@my_arr = (4, 5, 3, 1, 6, 8);
@rs_arr = reverse sort @my_arr;
27
Functions
데이터 취급에 관렦된 함수들
grep (/REGEX/, @str)
grep
split (/REGEX/, $str)
문자열 나누기
join ($str, @my_arr)
배열 사이에 문자를 추가
다음 문자열을 모두 빈칸으로 나누려면?
$names = “han,david kim_Lee choi Tom”;
@names = join “ “, split /[, _]s*/, $names;
28
Control Structure
제어
문 홈
제어문
연산자
if – else
unless – else
while
for
foreach
29
Control Structure – Conditional Statement
1. 연산자 (Operaters)
Greater Greater or
Equal
Less Than Less or
Equal
Equal Not Equal Comparison
> >= < <= == != <=>
gt ge lt le eq ne cmp
숫자에서맊
올바르게 동작 숫자, 문자에서
모두 올바르게
동작
print „a cmp b : ‟, (a cmp b) , "n";
print „a cmp a : ‟, (a cmp a) , "n";
print „b cmp a : ‟, (b cmp a) , "n";
a cmp b : -1
a cmp a : 0
b cmp a : 1
30
Control Structure – Conditional Statement
2. if ~ elsif ~ else
if (EXPRESSION) {
IF_TRUE_ STATEMENT;
} elsif (EXPRESSION) {
ELSE_IF_ STATEMENT;
} else {
ELSE_STATEMENT;
}
STATEMENT if (EXPRESSION);
EXPRESSION && STATEMENT;
EXPRESSION and STATEMENT;
if (EXPRESSION) STATEMENT;
* If 문에서는 반드시 중괄호로 블록처리 해줘야 함.
31
Control Structure – Conditional Statement
3. unless ~ else
unless (EXPRESSION) {
IF_FALSE_ STATEMENT;
} else {
ELSE_STATEMENT;
}
STATEMENT unless (EXPRESSION);
EXPRESSION || STATEMENT;
EXPRESSION or STATEMENT;
* unless 문에는 unless 와 else 밖에 없으며, elsunless 같은 것은 없음.
32
Control Structure – Loop
4. while
while (EXPRESSION){
STATEMANT;
}
STATEMENT while (EXPRESSION);
do {
STATEMENT
} while (EXPRESSION);
* do STATEMENT while (EXPRESSION) 은 do 을 제외한 것과 똑같이 동작
33
Control Structure – Loop
4. until
until (EXPRESSION){
STATEMENT;
}
STATEMENT until (EXPRESSION);
do{
STATEMENT;
} until (EXPRESSION);
* do STATEMENT until (EXPRESSION) 은 do 을 제외한 것과 똑같이 동작
34
Control Structure – Loop
5. For
6. Foreach
for ( ; ; ){
STATEMENT;
}
foreach VARIABLE (LIST) {
STATEMENT;
}
print $_;
35
Subroutines
서 브 루 틴
36
Subroutines
1. Subroutine
sub NAME{}
sub NAME(PROTOTYPES){}
생성
NAME;
NAME(@paramter);
&NAME(@parameter);
NAME @parameter;
호출
* 모든 매개변수는 array 의 형태( @_ )로 젂달됨
(@ARGV);
37
Subroutines
1. Subroutine
sub NAME(PROTOTYPES){}
sub foo($);
sub foo(@);
sub foo(@);
프로토타입
return $var;
return @arr;
return ($var, $var, $var);
리턴
38
Subroutines – Scope
2. Scope
Global Variable
젂역적으로 선언되어 프로그램
내 어느곳이든 접근 가능
our $variable
Local Variable
지역적으로 선언되어
선언된 블록안에서맊 접근가능
my $variable
Dynamic Scoped Variable
선언된 블록안에서 젂역적으로 선언
되어 하위 블록 및 함수에서 접근가능
local $variable
our $our_var;
sub foo2{
$our_var;
$local_var;
}
sub foo1{
local $local_var;
my $my_var;
sub foo2
}
39
File & Directory Handling
파일 디렉토리 핸들링
파일 핸들링
디렉토리 핸들링
40
File – Open & Close
1. Open & Close – 파일 핸들을 연계시키기 위해 사용
* open (MY_FILE, “file.txt”) 는 < 와 같게 작동
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); 열었던 파일을 닫음
open (MY_FILE, “<file.txt”) || die “Couldn‟t open file : $!”;
41
File – Read & Write
2. File Read
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
while(<MY_FILE>){
print;
}
foreach
(<MY_FILE>){
print;
}
print readline MY_FILE;
42
File – File Information
4. File Information
Option Description
-d FILEHANDLE (directory) FILEHANDLE이 디렉토리인지 리턴
-e FILEHANDLE (exist) FILEHANDLE이 존재하는지 리턴
-s FILEHANDLE (size) FILEHANDLE의 사이즈 리턴
-r FILEHANDLE (readable) FILEHANDLE 이 읽기 가능한지 리턴
-w FILEHANDLE (writable) FILEHANDLE 이 쓰기 가능한지 리턴
-z FILEHANDLE (zero) FILEHANDLE 의 크기가 0인지 리턴
43
File – Open
5. File Management
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의 젃대경로 출력
44
Directory – Handle
1. Drectory Open
2. Drectory Read
opendir (MY_DIR, “/etc”) || die “Couldn‟t open directory : $!”;
while ($file = readdir MY_DIR){
print $file;
}
foreach (readdir MY_DIR){
print;
}
@files = readdir MY_DIR
@files = glob(“*”); @files = </data/*>;
45
Directory –
2. Drectory Managerment
Form IN LINUX
chdir DIRECTORY; cd DIRECTORY;
rmdir DIRECTORY; rmdir DIRECTORY;
mkdir DIRECTORY MODE; mkdir –m MODE DIRECTORY;
use Cwd;
print getcwd();
현재 디렉토리의 젃대경로 출력
46
Directory – Exercise
예제 - ./test 디렉토리 안의 모든 파일의 내용을 출력
47
Directory – Exercise
예제 - ./test 디렉토리 안의 모든 파일의 내용을 출력
48
Process
프로세스
Child Processor 생성 & 호출
49
Process
프로세스 콜
펄 안에서 다른 프로세스를 실행시켜 자식 프로세스를
호출하고 출력 결과를 받음
50
Process - system
1. 프로세스 관리 – system()
$re = system(“perl hello.pl”);
print “return : $re”;
print “What is your name? “;
$input = <>;
print “Hello! $input”;
hello.pl
PROCESS
What is your name? O Seok
Hello! O Seok
return : 0
* Child Processor 를 생성하여 모든 것을 넘긴 후 Child Processor 가 끝나면
Parent Processor 로 돌아옴
* 해당 명령 결과 코드값 반환
(-1: 명령어 실행 못함, 0 : 프로세스 실행 완료, 이외의 숫자 : 프로세스 실행 중 오류)
오류 체크 : system(“perl hello.pl”) && die $!;
51
Process - exec
2. 프로세스 관리 – exec()
$re = exec(“perl hello.pl”);
print “return : $re”;
print “What is your name? “;
$input = <>;
print “Hello! $input”;
hello.pl
PROCESS
What is your name? O Seok
Hello! O Seok
* Child Processor 를 생성하여 모든 것을 넘긴 후 프로그램 종료하여 exec() 이후로는
Parent Processor로 컨트롤이 돌아오지 않음
* 명령이 실행되지 않은 경우에맊 에러 리턴코드 0 반환
오류 체크 : exec(“perl hello.pl”) || die $!;
52
Process – Back quota
3. 프로세스 관리 – ``
$re = `perl hello.pl`;
print “return : $re”;
print “What is your name? “;
$input = <>;
print “Hello! $input”;
hello.pl
PROCESS
O Seok
return : what is your name?
Hello~ O Seok
What is your name? Hello~ O Seok
* Child Processor 를 생성하여 모든 것을 넘긴 후 Child Processor 가 끝나면
Parent Processor 로 돌아옴
* 해당 명령의 출력 값을 반환
오류 체크 : `perl hello.pl` || die $!;
53
Package & Modules
* 패키지 * 모듈 * CPAN * perldoc
패키지 & 모듈
54
Package
Package
- 여러 모듈을 사용하는 경우, 또는 여러 함수가 있는 경우 이를 분리하는 역할
sub foo{ return "mainn"; }
print "curr foo : ", foo;
print "main::foo : ", &main::foo;
print "This::foo : ", &This::foo;
print "That::foo : ", &That::foo;
print "--------------------n";
package This;
sub foo{ return "thisn"; }
print "curr foo : ", foo;
print "main::foo : ", &main::foo;
print "This::foo : ", &This::foo;
print "That::foo : ", &That::foo;
print "--------------------n";
package That;
sub foo{ return "thatn"; }
print "curr foo : ", &foo;
print "main::foo : ", &main::foo;
print "This::foo : ", &This::foo;
print "That::foo : ", &That::foo;
curr foo : main
main::foo : main
This::foo : this
That::foo : that
--------------------
curr foo : this
main::foo : main
This::foo : this
That::foo : that
--------------------
curr foo : that
main::foo : main
This::foo : this
That::foo : that
55
Modules – create
1. 모듈
- 재사용을 위하여 맊든 소프트웨어 유닛
$ 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
.
56
Modules - create
2. 모듈의 생성
out.pm
sub println{
foreach(@_){
print “$_n”;
}
}
1; 모듈은 반드시 true를 리턴해야 함
57
Modules – use
3. 모듈의 사용
use DIR::out;
1. @INC 에서 out.pm 을 찾음
2. use module; 이 파싱되는 시점에 모든 모듈을 메모리에 저장.
3. package 명이 반드시 필요하진 않으며,
default package인 경우 NAME 만으로 사용가능.
58
Modules – use
3. 모듈의 사용
require DIR::out;
require „DIR/out.pm‟;
1. @INC 에서 out.pm 을 찾음
2. 실제 out의 정보가 호출되는 시점에서 해당 부분을 동적 로딩
3. 모듈은 반드시 package를 사용해야 하며,
package::NAME 의 형식으로 사용할 수 있음
59
Modules – Basic module
4. CPAN (Comprehensive Perl Archive Network)
:$ cpan;
cpan> install Module
use Lingua::JA::Number;
print to_string(1); => ichi
print to_string(2); => ni
print to_string(3); => san
cpan> install Lingua::JA::Number
http://www.cpan.org
60
Modules – Basic module
5. 맋이 사용하는 모듈 소개
use strict; - 불안젂한 구조를 제한함
use strict ‟vars‟;
no strict ‟vars‟;
use strict ‟refs‟;
no strict ‟refs‟;
use strict ‟subs‟;
no strict ‟subs‟;
$var = “hello”;
my $var = “hello”;
print $$var;
print $var;
sub foo{ … }
foo($var);
&foo($var);
61
Modules – Basic module
5. 맋이 사용하는 모듈 소개
use integer; - double 이 아닌 integer 산술 연산을 수행
use lib ”PATH”; - 현 프로그램에서 임시 라이브러리 경로로 사용
use File::Cwd; - Current Working Directory 에 관련된 함수 제공
use File::Copy; - 파일 복사에 관련된 함수 제공
use File::Compare; - 파일 비교에 관련된 함수 제공
62
Interactive Interpreter – perldoc
Perldoc
perldoc Module : 모듈 명으로 보는 도큐먼트
perldoc -f function : 함수에 대한 도큐먼트
perldoc -i Keyword : 키워드가 포함된 도큐먼트
perldoc -l Module : 해당 모듈의 경로
63
Database & Socket
데이터 베이스 연동
&
소켓 프로그래밍
64
Database – DBI
1. DBI – SELECT 예제
use DBI; # DBI 모듈 사용
$dbh = DBI->connect
(“dbi:Oracle:host=host;sid=db_sid;port=1521”, $user, $password);
# HOST, USER, PASSWORD를 매개변수로 connection 변수 생성
## Select ##
$sth = $dbh->prepare(“SELECT name, tel from table”); # 쿼리 준비
$sth->excute; # 쿼리 실행
while(($name, $tel) = $sth->fetchrow_array){ # 결과 변수 바인딩
…
}
$sth->finish; # statement 해제
$dbh->disconnect; # DB연결 해제
65
Database – DBI
2. DBI – INSERT 예제
use DBI; # DBI 모듈 사용
$dbh = DBI->connect
(“dbi:Oracle:host=host;sid=db_sid;port=1521”, $user, $password);
# HOST, USER, PASSWORD를 매개변수로 connection 변수 생성
## Insert ##
$query = “INSERT INTO table(name, tel) values (?,?)”; # 쿼리
$sth = $dbh->prepare($query); # 쿼리 준비
$sth->bind_param (1, $name); # 쿼리 변수 바인딩
$sth->bind_param (2, $tel); # 쿼리 변수 바인딩
$sth->excute; # 쿼리 실행
$sth->finish; # statement 해제
$sth->commit; # DB 커밋
$dbh->disconnect; # DB연결 해제
* /hanmail/bin/per/lib/db_common.pm
66
Networking – socket
IO::Socket 예제
* /hanmail/bin/per/lib/net_common.pm
use IO::Socket; # Socket모듈 사용
$buf = 25600;
$socket = IO::Socket::INET->new(
“PeerAddr => “localhost” , PeerPort => 80 , Proto => “tcp” );
# PeerAddr(Host), PeerPort(Port), Proto(Protocol)로 소켓 생성
$req = “GET / HTTP/1.0nn”; # Request Header
syswrite ($socket, $req); # Request
sysread ($socket, $res , $buf); # Response
print $res;
67
Interactive Interpreter – option
perl -e Execute 쉘 상에서 perl 실행
perl -e „$x=“hi”; print “$xn”;‟
perl -d Debbuging 프로그램 디버깅
68
Interactive Interpreter – option
perl -w worning 경고 표시
perl -we „$x=“hi”;‟
perl -c compile 컴파일 실행
perl -Mmodule 모듈을 사용하여 실행
69
감사합니다
감사합니다

Weitere ähnliche Inhalte

Was ist angesagt?

0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
Sung-hoon Ma
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
Software in Life
 

Was ist angesagt? (20)

PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)
2014.07.26 KSUG와 지앤선이 함께하는 테크니컬 세미나 - 씹고 뜯고 맛보고 즐기는 스트림 API(박용권)
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
 
Javascript기초
Javascript기초Javascript기초
Javascript기초
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
 
파이썬 스터디 2주차
파이썬 스터디 2주차파이썬 스터디 2주차
파이썬 스터디 2주차
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function프론트엔드스터디 E04 js function
프론트엔드스터디 E04 js function
 
Javascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operatorJavascript introduction, dynamic data type, operator
Javascript introduction, dynamic data type, operator
 
2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자2.Startup JavaScript - 연산자
2.Startup JavaScript - 연산자
 
Swift basic operators-controlflow
Swift basic operators-controlflowSwift basic operators-controlflow
Swift basic operators-controlflow
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 

Ähnlich wie Perl Script

Web vulnerability seminar2
Web vulnerability seminar2Web vulnerability seminar2
Web vulnerability seminar2
Sakuya Izayoi
 
C Language I
C Language IC Language I
C Language I
Suho Kwon
 
외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements
민태 김
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheet
Youngkwon Lee
 

Ähnlich wie Perl Script (20)

Web vulnerability seminar2
Web vulnerability seminar2Web vulnerability seminar2
Web vulnerability seminar2
 
자바스크립트
자바스크립트자바스크립트
자바스크립트
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성
[방송통신대 컴퓨터과학과] C 프로그래밍 과제물 작성
 
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
Shellscript에 대하여
Shellscript에 대하여Shellscript에 대하여
Shellscript에 대하여
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
C Language I
C Language IC Language I
C Language I
 
Javascript
JavascriptJavascript
Javascript
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
 
Java.next
Java.nextJava.next
Java.next
 
PSR - Code Convention
PSR - Code ConventionPSR - Code Convention
PSR - Code Convention
 
외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements외계어 스터디 2/5 - Expressions & statements
외계어 스터디 2/5 - Expressions & statements
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheet
 
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
파이썬 플라스크로 배우는 웹프로그래밍 #3 (ABCD)
 
Sha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeupSha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeup
 
1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초1.Startup JavaScript - 프로그래밍 기초
1.Startup JavaScript - 프로그래밍 기초
 

Mehr von 오석 한 (13)

Smart work
Smart workSmart work
Smart work
 
RPC protocols
RPC protocolsRPC protocols
RPC protocols
 
Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)Serialization (Avro, Message Pack, Kryo)
Serialization (Avro, Message Pack, Kryo)
 
Cassandra
CassandraCassandra
Cassandra
 
Smart Phone CPU
Smart Phone CPUSmart Phone CPU
Smart Phone CPU
 
Functional progrmming with scala
Functional progrmming with scalaFunctional progrmming with scala
Functional progrmming with scala
 
Linux tips
Linux tipsLinux tips
Linux tips
 
Apache Click
Apache ClickApache Click
Apache Click
 
JAVA NIO
JAVA NIOJAVA NIO
JAVA NIO
 
예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법예제로 쉽게 배우는 Log4j 기초 활용법
예제로 쉽게 배우는 Log4j 기초 활용법
 
Vi 단축키명령어
Vi 단축키명령어Vi 단축키명령어
Vi 단축키명령어
 
정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약정규 표현식 기본 메타문자 요약
정규 표현식 기본 메타문자 요약
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용정규표현식의 이해와 활용
정규표현식의 이해와 활용
 

Perl Script

  • 1. 1 Perl Script 한오석, 커뮤니티SU, 커뮤니티개발1팀 2008-09-25
  • 2. 2 2부 : Perl script 의 심화1부 : Perl script 의 기초 목 차  File, Directory Access  Process  Package, Modules  Database, Socket  Introduction  Let’s Start Perl!  Data type  Control Statement  Subroutines
  • 3. 3 Introduction - Meaning Extracting information from text files, and printing reports based on that information
  • 5. 5 Introduction - History History Bell Labs – pipe concept => $_ C - && || ++ -- Perl1 - Larry Wall Perl2 – Regular Expression Perl4 – “Camel” book CPAN Perl5.10 (café 5.8.5) http://www.perl.org http://www.perl.com
  • 7. 7 Let’s Start Perl ! (@ARGV) ; Good afternoon Oseok Good afternoon KyungBo Good afternoon JongHyeop
  • 8. 8 Data Type 데이터타입 스칼라 배열 해시 레퍼런스 IO 함수
  • 9. 9 Data Type – Scalar 1. 숫자 (Numeric Literals) $num = 10; # integer $num = 3.14; # floating point * Perl 내부에서는 모든 숫자를 배정밀도 부동소수점 (double-precision)포맷을 사용한다. $i = 10/3; print $i; $i = 3.0000000; print $i; $i = int(10.3); print $i; 33.33333333333333 3
  • 10. 10 Data Type – Scalar 2. 문자 (String Literals) $my_str = string; # 문자+숫자로맊 이루어진 경우 사용 가능 $my_str = „string‟; # Single-quoted String $my_str = q/string/; (변수, 특수문자 파싱할 수 없음) $my_str = “string”; # Double-quoted String $my_str = qq/string/; ( 변수, 특수문자 파싱됨 ) $hi = Hi; $my_str = ‟‟$hi! Comm‟‟; print $my_str; $hi = Hi; $mt_str = qq/”$hi! Comm”/; print $mt_str; „$hi! Comm‟ “Hi! Comm”
  • 11. 11 Data Type – Scalar 2. 문자 (String Literals) length($my_str); # 문자의 길이를 리턴 substr($my_str, 3, 4); # $str 3번째 문자부터 4개의 문자열을 맊듬 $my_str = “Hello”; $my_cnt = length($my_str); print $my_cnt; $my_str = “Hello”; $my_substr = substr($my_str, 2, 2); print $my_substr; 5 ll
  • 12. 12 Data Type – Scalar 3. 정의 되지 않은 값 $nothing = undef; # null 처럼 아무 값도 정의 되지 않음 defined($var); # 변수가 정의 되어 있는지 리턴 $my_var = “value”; $my_undef = undef; $my_noinit; print „$my_var = „, defined($ my_var ), “n”; print „$my_undef= „, defined($my_undef ), “n”; print „$my_noinit = „, defined($ my_noinit), “n”; $my_var = 1 $my_undef = $my_noinit =
  • 13. 13 Data Type – Scalar 4. 메모리 해제 undef $var; print „$var = „, $var, “n”; $var= “value”; print „$var = „, $var, “n”; undef $var; print „$var = „, $var, “n”; Use of uninitialized value in print at ./deftest.pl line 3. $var = $var = value Use of uninitialized value in print at ./deftest.pl line 7. $var =
  • 14. 14 Data Type – Scalar 5. Boolean – false 로 취급되는 것들 - 0 - undef - Empty String - Empty Array - Empty Hash
  • 15. 15 Data Type – Array 1. 배열의 생성 (Creation) @my_array = (1, 2, com); # comma로 구분 @my_array = (1..2, a..c); # 1,2,a,b,c @my_array = qw/1 2 com/; # 빈칸으로 구분 2. 배열의 요소 (Elements) $my_array[0]; @my_array[0..2]; * $my_array[0] 와 @my_array[0]의 차이는 없지맊, 개별요소의 경우에는 스칼라 변수의 형태로 사용을 권장.
  • 16. 16 Data Type – Array 3. 배열의 크기 (Size) $my_array_cnt = @my_array; # 배열의 총 개수 scalar @my_array; # 배열의 총 개수 @#my_array; # 배열의 마지막 인덱스 4. 요소의 추가 및 추출 push @my_array $var; pop @my_array; # 배열의 마지막 요소 리턴 shift @my_array; # 배열의 첫 요소 리턴
  • 17. 17 Data Type – Hash 1. 해시의 생성 (Creation) %my_hash = („key1‟ => „value1‟, „key2‟ => „value2‟, „key3‟ => „value3‟); %my_hash = qw/key1 value1 key2 value2 key3 value3/; $my_hash{„key1‟} = „value1‟; $my_hash{„key2‟} = „value2‟; $my_hash{„key3‟} = „value3‟; * 짝이 맞지 않게 생성된 경우에는 Odd number of elements 에러 발생
  • 18. 18 Data Type – Hash 2. 해시의 요소(Elements) $my_hash{„key1‟}; # 단일 요소 value1 %my_hash; # 젂체 요소 key2value2key1value1… keys %my_hash # 해시 키 요소 key2key3key1 values %my_hash # 해시 값 요소 value2value3value1 3. 해시의 크기 (Size) $my_hash_cnt = keys %my_hash; # 해시 키의 총 개수 scalar values %my_hash; # 해시 값의 총 개수 * scalar %my_hash 는 해시 젂체 크기를 반환하지 않고 bucket이라 부르는 해 시 저장공간의 정보 used/total을 반환한다.
  • 19. 19 Data Type – References 1. Reference : C언어의 포인터와 비슷하게 작동함 $r = $x; 와 같은 형식은 reference를 수정할 수 없다는 오류 (Can't modify single ref constructor) 발생 $my_scalar @my_array %my_hash &my_subroutine $x : 10, $$r : 10 $x = 5; $r = $x; $$r = 10; printf ('$x : %d, $$r : %d', $x, $$r);
  • 20. 20 Symbol Table Data Type – References 2. Typeglob $t_glob = “scalar”; @t_glob = (arr1..arr3); %t_glob = qw/k1 v1 k2 v2 k3 v3/; sub t_glob{ print @_, “n”; } scalar arr1arr2arr3 k2v2k1v1k3v3 *c_glob = *t_glob; &c_glob($c_glob); &c_glob(@c_glob); &c_glob(%c_glob); Typeglob Data $t_glob @t_glob %t_glob &t_glob $c_glob @c_glob %c_glob &c_glob Typeglob (t_glob) Typeglob (c_glob) *c_glob = *t_glob;
  • 21. 21 Data Type – References 2. Typeglob c_scalar c_arr1c_arr2c_arr3 c_k2c_v2c_k1c_v1c_k3c_v3 $t_glob = “scalar”; @t_glob = (arr1..arr3); %t_glob = qw/k1 v1 k2 v2 k3 v3/; sub t_glob{ print @_, “n”; } *c_glob = *t_glob; &c_glob($c_glob); &c_glob(@c_glob); &c_glob(%c_glob); $c_glob = “c_scalar”; @c_glob = (c_arr1..c_arr3); %c_glob = qw/c_k1 c_v1 c_k2 c_v2 c_k3 c_v3); &t_glob($t_glob); &t_glob(@t_glob); &t_glob(%t_glob); scalar arr1arr2arr3 k2v2k1v1k3v3
  • 22. 22 Data Type – Special Variable 특수 변수의 종류 Default Input Value$_ 마지막으로 실행한 system call에서 오류가 발생한경우, 그 내용을 담는 변수 $! 서브루틴에서 매개변수를 받는 배열@_ 해당 프로그램이 가지는 Process ID 변수$$
  • 23. 23 Data Type – Special Variable 특수 변수의 종류 프로그램 명$0 파라미터 배열@ARGV 시스템 환경정보를 담은 해시 (env)%ENV OS 이름 변수 (linux)$^O
  • 24. 24 Standard IO 1. STDIN – 키보드 입력 chomp; - n 맊을 제거 chop; - 마지막 문자를 제거 $input = <>; $input = <STDIN>; @input = <>;
  • 25. 25 Standard IO 2. STDOUT – 화면 출력 – 파일 핸들러로 사용 가능 3. STDERR – 화면 출력 – 파일 핸들러로 사용 가능 print STDOUT “out string”; print “out string”;
  • 26. 26 Functions 데이터 취급에 관렦된 함수들 use constant PI =>3.14; 상수 선언 reverse (@my_arr) 배열을 역순으로 리턴 sort (@my_arr) 배열을 정렧 배열을 역순으로 정렧하려면 ? @my_arr = (4, 5, 3, 1, 6, 8); @rs_arr = reverse sort @my_arr;
  • 27. 27 Functions 데이터 취급에 관렦된 함수들 grep (/REGEX/, @str) grep split (/REGEX/, $str) 문자열 나누기 join ($str, @my_arr) 배열 사이에 문자를 추가 다음 문자열을 모두 빈칸으로 나누려면? $names = “han,david kim_Lee choi Tom”; @names = join “ “, split /[, _]s*/, $names;
  • 28. 28 Control Structure 제어 문 홈 제어문 연산자 if – else unless – else while for foreach
  • 29. 29 Control Structure – Conditional Statement 1. 연산자 (Operaters) Greater Greater or Equal Less Than Less or Equal Equal Not Equal Comparison > >= < <= == != <=> gt ge lt le eq ne cmp 숫자에서맊 올바르게 동작 숫자, 문자에서 모두 올바르게 동작 print „a cmp b : ‟, (a cmp b) , "n"; print „a cmp a : ‟, (a cmp a) , "n"; print „b cmp a : ‟, (b cmp a) , "n"; a cmp b : -1 a cmp a : 0 b cmp a : 1
  • 30. 30 Control Structure – Conditional Statement 2. if ~ elsif ~ else if (EXPRESSION) { IF_TRUE_ STATEMENT; } elsif (EXPRESSION) { ELSE_IF_ STATEMENT; } else { ELSE_STATEMENT; } STATEMENT if (EXPRESSION); EXPRESSION && STATEMENT; EXPRESSION and STATEMENT; if (EXPRESSION) STATEMENT; * If 문에서는 반드시 중괄호로 블록처리 해줘야 함.
  • 31. 31 Control Structure – Conditional Statement 3. unless ~ else unless (EXPRESSION) { IF_FALSE_ STATEMENT; } else { ELSE_STATEMENT; } STATEMENT unless (EXPRESSION); EXPRESSION || STATEMENT; EXPRESSION or STATEMENT; * unless 문에는 unless 와 else 밖에 없으며, elsunless 같은 것은 없음.
  • 32. 32 Control Structure – Loop 4. while while (EXPRESSION){ STATEMANT; } STATEMENT while (EXPRESSION); do { STATEMENT } while (EXPRESSION); * do STATEMENT while (EXPRESSION) 은 do 을 제외한 것과 똑같이 동작
  • 33. 33 Control Structure – Loop 4. until until (EXPRESSION){ STATEMENT; } STATEMENT until (EXPRESSION); do{ STATEMENT; } until (EXPRESSION); * do STATEMENT until (EXPRESSION) 은 do 을 제외한 것과 똑같이 동작
  • 34. 34 Control Structure – Loop 5. For 6. Foreach for ( ; ; ){ STATEMENT; } foreach VARIABLE (LIST) { STATEMENT; } print $_;
  • 36. 36 Subroutines 1. Subroutine sub NAME{} sub NAME(PROTOTYPES){} 생성 NAME; NAME(@paramter); &NAME(@parameter); NAME @parameter; 호출 * 모든 매개변수는 array 의 형태( @_ )로 젂달됨 (@ARGV);
  • 37. 37 Subroutines 1. Subroutine sub NAME(PROTOTYPES){} sub foo($); sub foo(@); sub foo(@); 프로토타입 return $var; return @arr; return ($var, $var, $var); 리턴
  • 38. 38 Subroutines – Scope 2. Scope Global Variable 젂역적으로 선언되어 프로그램 내 어느곳이든 접근 가능 our $variable Local Variable 지역적으로 선언되어 선언된 블록안에서맊 접근가능 my $variable Dynamic Scoped Variable 선언된 블록안에서 젂역적으로 선언 되어 하위 블록 및 함수에서 접근가능 local $variable our $our_var; sub foo2{ $our_var; $local_var; } sub foo1{ local $local_var; my $my_var; sub foo2 }
  • 39. 39 File & Directory Handling 파일 디렉토리 핸들링 파일 핸들링 디렉토리 핸들링
  • 40. 40 File – Open & Close 1. Open & Close – 파일 핸들을 연계시키기 위해 사용 * open (MY_FILE, “file.txt”) 는 < 와 같게 작동 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); 열었던 파일을 닫음 open (MY_FILE, “<file.txt”) || die “Couldn‟t open file : $!”;
  • 41. 41 File – Read & Write 2. File Read 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 while(<MY_FILE>){ print; } foreach (<MY_FILE>){ print; } print readline MY_FILE;
  • 42. 42 File – File Information 4. File Information Option Description -d FILEHANDLE (directory) FILEHANDLE이 디렉토리인지 리턴 -e FILEHANDLE (exist) FILEHANDLE이 존재하는지 리턴 -s FILEHANDLE (size) FILEHANDLE의 사이즈 리턴 -r FILEHANDLE (readable) FILEHANDLE 이 읽기 가능한지 리턴 -w FILEHANDLE (writable) FILEHANDLE 이 쓰기 가능한지 리턴 -z FILEHANDLE (zero) FILEHANDLE 의 크기가 0인지 리턴
  • 43. 43 File – Open 5. File Management 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의 젃대경로 출력
  • 44. 44 Directory – Handle 1. Drectory Open 2. Drectory Read opendir (MY_DIR, “/etc”) || die “Couldn‟t open directory : $!”; while ($file = readdir MY_DIR){ print $file; } foreach (readdir MY_DIR){ print; } @files = readdir MY_DIR @files = glob(“*”); @files = </data/*>;
  • 45. 45 Directory – 2. Drectory Managerment Form IN LINUX chdir DIRECTORY; cd DIRECTORY; rmdir DIRECTORY; rmdir DIRECTORY; mkdir DIRECTORY MODE; mkdir –m MODE DIRECTORY; use Cwd; print getcwd(); 현재 디렉토리의 젃대경로 출력
  • 46. 46 Directory – Exercise 예제 - ./test 디렉토리 안의 모든 파일의 내용을 출력
  • 47. 47 Directory – Exercise 예제 - ./test 디렉토리 안의 모든 파일의 내용을 출력
  • 49. 49 Process 프로세스 콜 펄 안에서 다른 프로세스를 실행시켜 자식 프로세스를 호출하고 출력 결과를 받음
  • 50. 50 Process - system 1. 프로세스 관리 – system() $re = system(“perl hello.pl”); print “return : $re”; print “What is your name? “; $input = <>; print “Hello! $input”; hello.pl PROCESS What is your name? O Seok Hello! O Seok return : 0 * Child Processor 를 생성하여 모든 것을 넘긴 후 Child Processor 가 끝나면 Parent Processor 로 돌아옴 * 해당 명령 결과 코드값 반환 (-1: 명령어 실행 못함, 0 : 프로세스 실행 완료, 이외의 숫자 : 프로세스 실행 중 오류) 오류 체크 : system(“perl hello.pl”) && die $!;
  • 51. 51 Process - exec 2. 프로세스 관리 – exec() $re = exec(“perl hello.pl”); print “return : $re”; print “What is your name? “; $input = <>; print “Hello! $input”; hello.pl PROCESS What is your name? O Seok Hello! O Seok * Child Processor 를 생성하여 모든 것을 넘긴 후 프로그램 종료하여 exec() 이후로는 Parent Processor로 컨트롤이 돌아오지 않음 * 명령이 실행되지 않은 경우에맊 에러 리턴코드 0 반환 오류 체크 : exec(“perl hello.pl”) || die $!;
  • 52. 52 Process – Back quota 3. 프로세스 관리 – `` $re = `perl hello.pl`; print “return : $re”; print “What is your name? “; $input = <>; print “Hello! $input”; hello.pl PROCESS O Seok return : what is your name? Hello~ O Seok What is your name? Hello~ O Seok * Child Processor 를 생성하여 모든 것을 넘긴 후 Child Processor 가 끝나면 Parent Processor 로 돌아옴 * 해당 명령의 출력 값을 반환 오류 체크 : `perl hello.pl` || die $!;
  • 53. 53 Package & Modules * 패키지 * 모듈 * CPAN * perldoc 패키지 & 모듈
  • 54. 54 Package Package - 여러 모듈을 사용하는 경우, 또는 여러 함수가 있는 경우 이를 분리하는 역할 sub foo{ return "mainn"; } print "curr foo : ", foo; print "main::foo : ", &main::foo; print "This::foo : ", &This::foo; print "That::foo : ", &That::foo; print "--------------------n"; package This; sub foo{ return "thisn"; } print "curr foo : ", foo; print "main::foo : ", &main::foo; print "This::foo : ", &This::foo; print "That::foo : ", &That::foo; print "--------------------n"; package That; sub foo{ return "thatn"; } print "curr foo : ", &foo; print "main::foo : ", &main::foo; print "This::foo : ", &This::foo; print "That::foo : ", &That::foo; curr foo : main main::foo : main This::foo : this That::foo : that -------------------- curr foo : this main::foo : main This::foo : this That::foo : that -------------------- curr foo : that main::foo : main This::foo : this That::foo : that
  • 55. 55 Modules – create 1. 모듈 - 재사용을 위하여 맊든 소프트웨어 유닛 $ 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 .
  • 56. 56 Modules - create 2. 모듈의 생성 out.pm sub println{ foreach(@_){ print “$_n”; } } 1; 모듈은 반드시 true를 리턴해야 함
  • 57. 57 Modules – use 3. 모듈의 사용 use DIR::out; 1. @INC 에서 out.pm 을 찾음 2. use module; 이 파싱되는 시점에 모든 모듈을 메모리에 저장. 3. package 명이 반드시 필요하진 않으며, default package인 경우 NAME 만으로 사용가능.
  • 58. 58 Modules – use 3. 모듈의 사용 require DIR::out; require „DIR/out.pm‟; 1. @INC 에서 out.pm 을 찾음 2. 실제 out의 정보가 호출되는 시점에서 해당 부분을 동적 로딩 3. 모듈은 반드시 package를 사용해야 하며, package::NAME 의 형식으로 사용할 수 있음
  • 59. 59 Modules – Basic module 4. CPAN (Comprehensive Perl Archive Network) :$ cpan; cpan> install Module use Lingua::JA::Number; print to_string(1); => ichi print to_string(2); => ni print to_string(3); => san cpan> install Lingua::JA::Number http://www.cpan.org
  • 60. 60 Modules – Basic module 5. 맋이 사용하는 모듈 소개 use strict; - 불안젂한 구조를 제한함 use strict ‟vars‟; no strict ‟vars‟; use strict ‟refs‟; no strict ‟refs‟; use strict ‟subs‟; no strict ‟subs‟; $var = “hello”; my $var = “hello”; print $$var; print $var; sub foo{ … } foo($var); &foo($var);
  • 61. 61 Modules – Basic module 5. 맋이 사용하는 모듈 소개 use integer; - double 이 아닌 integer 산술 연산을 수행 use lib ”PATH”; - 현 프로그램에서 임시 라이브러리 경로로 사용 use File::Cwd; - Current Working Directory 에 관련된 함수 제공 use File::Copy; - 파일 복사에 관련된 함수 제공 use File::Compare; - 파일 비교에 관련된 함수 제공
  • 62. 62 Interactive Interpreter – perldoc Perldoc perldoc Module : 모듈 명으로 보는 도큐먼트 perldoc -f function : 함수에 대한 도큐먼트 perldoc -i Keyword : 키워드가 포함된 도큐먼트 perldoc -l Module : 해당 모듈의 경로
  • 63. 63 Database & Socket 데이터 베이스 연동 & 소켓 프로그래밍
  • 64. 64 Database – DBI 1. DBI – SELECT 예제 use DBI; # DBI 모듈 사용 $dbh = DBI->connect (“dbi:Oracle:host=host;sid=db_sid;port=1521”, $user, $password); # HOST, USER, PASSWORD를 매개변수로 connection 변수 생성 ## Select ## $sth = $dbh->prepare(“SELECT name, tel from table”); # 쿼리 준비 $sth->excute; # 쿼리 실행 while(($name, $tel) = $sth->fetchrow_array){ # 결과 변수 바인딩 … } $sth->finish; # statement 해제 $dbh->disconnect; # DB연결 해제
  • 65. 65 Database – DBI 2. DBI – INSERT 예제 use DBI; # DBI 모듈 사용 $dbh = DBI->connect (“dbi:Oracle:host=host;sid=db_sid;port=1521”, $user, $password); # HOST, USER, PASSWORD를 매개변수로 connection 변수 생성 ## Insert ## $query = “INSERT INTO table(name, tel) values (?,?)”; # 쿼리 $sth = $dbh->prepare($query); # 쿼리 준비 $sth->bind_param (1, $name); # 쿼리 변수 바인딩 $sth->bind_param (2, $tel); # 쿼리 변수 바인딩 $sth->excute; # 쿼리 실행 $sth->finish; # statement 해제 $sth->commit; # DB 커밋 $dbh->disconnect; # DB연결 해제 * /hanmail/bin/per/lib/db_common.pm
  • 66. 66 Networking – socket IO::Socket 예제 * /hanmail/bin/per/lib/net_common.pm use IO::Socket; # Socket모듈 사용 $buf = 25600; $socket = IO::Socket::INET->new( “PeerAddr => “localhost” , PeerPort => 80 , Proto => “tcp” ); # PeerAddr(Host), PeerPort(Port), Proto(Protocol)로 소켓 생성 $req = “GET / HTTP/1.0nn”; # Request Header syswrite ($socket, $req); # Request sysread ($socket, $res , $buf); # Response print $res;
  • 67. 67 Interactive Interpreter – option perl -e Execute 쉘 상에서 perl 실행 perl -e „$x=“hi”; print “$xn”;‟ perl -d Debbuging 프로그램 디버깅
  • 68. 68 Interactive Interpreter – option perl -w worning 경고 표시 perl -we „$x=“hi”;‟ perl -c compile 컴파일 실행 perl -Mmodule 모듈을 사용하여 실행