Introducing
- What is Perl?
Practical Extraction and Report Language, 1993년 Larry Wall에 의해 개발.
최초의 개발 목적은 문자열과 텍스트 파일 처리 및 리포트 기능의 간편화를 위해서였음.
현재에는 web, db, shell, network, system tool, script 등 광범위한 분야에서 사용 중임.
C와 유사한 문법을 사용. 컴파일 방식과 인터프리트 방식의 중간쯤에 위치.
내장 디버거를 이용하여 디버깅. TCP/IP 네트워킹. 정규 표현식 사용. 등등등…
- 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) 메일 보내기.