Perl Study #1

Introducing

 

  1. What is Perl?

Practical Extraction and Report Language, 1993년 Larry Wall에 의해 개발.

최초의 개발 목적은 문자열과 텍스트 파일 처리 및 리포트 기능의 간편화를 위해서였음.

현재에는 web, db, shell, network, system tool, script 등 광범위한 분야에서 사용 중임.

C와 유사한 문법을 사용. 컴파일 방식과 인터프리트 방식의 중간쯤에 위치.

내장 디버거를 이용하여 디버깅. TCP/IP 네트워킹. 정규 표현식 사용. 등등등…

 

  1. A not so simple program

#!/usr/bin/perl –w                    1)

init_words();

print “What is your name? “;          2)

$name = <STDIN>;                      3)

chomp($name);                         4)

if ($name =~ /^randal/i) {          5)

print “Hello, Randal! How good of you to be here! ”

} else {

print “Hello, $name! “;

print “What is the secret word? “;

$guess = <STDIN>;

chomp $guess;

while (!good_word($name, $guess)) {

print “Wrong, try again. What is the scret word? “;

$guess = <STDIN>;

chomp($guess);

}

}

dbmopen(%last_good, “astdb”, 0666);   6)

$last_good{$name} = time;             7)

dbmclose(%last_good);

 

sub init_words{                              8)

while ($filename = <*.secret>) {      9)

open(WORDLIST, $filename) ||  10)

die “can’t open $filename: $!”;       11)

if (-M WORDLIST < 7.0) {      12)

while ($name = <WORDLIST>) {  13)

chomp($name);

$word = <WORDLIST>;

chomp($word);

$words{$name} = $word;

}

} else {

rename($filename, “$filename.old”) || 14)

die “can’t rename $filename: $!”;

}

close WORDLIST;

}

}

sub good_word{

my($somename, $someguess) = @_;              15)

return 1;

} else {

open (MAIL, “|mail YOUR_ADDRESS_HERE”);         20)

print MAIL “bad new: $somename guessed $someguess “;

close MAIL;

return 0;

}

}

l       실행하기 : $chmod u+x <filename>

l                 $./<filename>

l       혹은      $perl <filename>

 

 

 

comments

1) # 주석기호, perl program을 알림. 스크립트로 실행시 perl 인터프리터의 위치, 옵션 지정

2) STDOUT으로 출력, print (…);, print …; 동일함.

3) STDIN으로부터 입력, $ <- 단일변수기호, = <- 대입기호, <STDIN> <- 입력장치

키보드로부터 들어온 하나의 행을 변수에 대입. 크기는?

4) 3)으로부터 받은 변수에 있는 (C와 동일)을 삭제

5) 정규 표현식 문자열의 시작 randal과 비교. /i는 대소문자 구분 안함. 는 단어 경계표시

6) dbm 데이터베이스 열기 %는 해시, 파일 이름, 퍼미션

7) 해시로부터 키를 통해 하나의 값에 time 값을 입력. 파일로 쓰여짐.

8) 서브루틴 만들기. 함수의 반환값 타입, 파라미터 타입/이름 등은 설정하지 않음.

9) 현재 디렉에서 *.secret 이라는 모든 파일 검색하기. $filename에 배정

10) $filename에 해당하는 파일을 WORDLIST라는 파일 핸들로 open하기

11) 파일 열기에 실패할 경우 메시지 출력 후 die. 아주 간단한 예외처리

12) –M 연산자. 파일 또는 파일핸들이 최종적으로 수정된 이후 지난 날을 리턴

13) WORDLIST라는 파일핸들로부터 하나의 행 가져오기. <STDIN>과 동일

14) 파일 이름 고치기. C와 동일. 안되면 die

15) 들어온 파라미터를 함수의 지역변수에 복사할당(값 전달). @_ 는 파라미터 위치.

16) 정규표현식. 첫 단어 뒤의 모든 것을 제거. W 비단어 문자, .* 그 뒤로 모두 s 제거.

17) 정규표현식. 모두 소문자로 바꿈.

18) 리턴하기. 1 은 true

19) elsif  = else if, 파라미터 someguess와 해시로부터 키 somename으로 가져온 word를 비교함. 키가 발견되지 않으면 default로 groucho를 사용.

20) 메일 보내기.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다