본문 바로가기

Common Gateway Interface/Perl

[옛 강좌] 04. Perllang - 펄 기초 문법 2

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 이 게시물은 지금은 폐쇄되어 접속되지 않는 Kim Young Soo(http://hours.interpia98.net/~unisoo/)님의 웹 사이트에 2001년경 게시된 내용을 바탕으로 오늘날 웹 환경에 맞게 내용을 덧붙였습니다.

Perllang - 펄 기초 문법 2

Description

제어문, 파일제어...


연산자(Operator)

 우선 Perl에서 쓰이는 대표적인 논리적 연산자에 대해서 알아보겠습니다. 논리적 연산자로는 ||(or) 와 &&(and)가 있습니다.

 이 두개의 연산자는 양쪽에 오는 값에 따라 참, 또는 거짓의 값을 되돌립니다.

||(or)

|| 연산자는 '또는' 이란 뜻으로, 'A || B' 일 경우 'A 또는 B 가 ...' 라는 뜻이 되며, A,B 두 값중 하나만 참이 되더라도 전체의 값은 참이 됩니다. 두개의 값이 모두 거짓일 경우 전체의 값이 거짓이 되는거죠.

&&(and)

 &&연산자는 '그리고' 이란 뜻으로, 'A && B' 일 경우 'A 그리고 B 가 ...' 라는 뜻이 되며, A,B 두 값중 하나만 거짓이 되더라도 전체의 값은 거짓이 됩니다. 두개의 값이 모두 참일 경우 전체의 값이 참이 되는거죠.

 그리고 이 두개의 연산자는 이런 비교의 경우가 아닌, 펄 문장들을 결합시키는 역할 또한 합니다. 이때 '||'연산자는 '그렇지 않다면..' 이 되고 '&&' 연산자는 '그렇다면..' 으로 해석될수 있습니다.

$value > 5 || print "값이 너무 작습니다.";
$value < 5 && print "값이 너무 작습니다.";

 이 두 문장 모두 같은 역할을 하는데, 위의 예는 'value의 값이 5보다 크지 않다면...' 이 되고, 아래의 예는 'value의 값이 5보다 작다면....' 이 됩니다.

덧붙임: ||와 && 연산자 구문

 위의 두 구문의 의미를 정리하자면

{조건문 A} || {A가 아닐 경우의 처리}

{조건문 A} && {A일 경우의 처리}

로 이해하면 됩니다.

아래 소스는 변수 $value에 정수 10을 기억시킨 후 $value가 5보다 작으면 문구를 출력하는 소스입니다. $value가 5보다 크므로 웹 브라우저에서는 아무것도 출력되지 않을 것입니다.

#!/usr/bin/perl

$value = 10;

print "Content-type: text/html\n\n";
print "<html>\n";
print "\t<head>\n";
print "\t\t<meta charset=\"utf-8\" />\n";
print "\t</head>\n";
print "\t<body>\n";
$value > 5 || print "\t\t<p>value &lt; 5 #1</p>"; # $value가 5보다 크지 않다면 뒤에 나오는 명령 실행
$value < 5 && print "\t\t<p>value &lt; 5 #2</p>"; # $value가 5보다 작다면 뒤에 나오는 명령 실행
print "\t</body>\n";
print "</html>\n";
							

다음은 변수 $value에 정수 0을 기억시킨 후 $value가 5보다 작으면 문구를 출력하는 소스입니다. $value가 5보다 작으므로 웹 브라우저에서는 문구를 출력할 것입니다.

#!/usr/bin/perl

$value = 0;

print "Content-type: text/html\n\n";
print "<html>\n";
print "\t<head>\n";
print "\t\t<meta charset=\"utf-8\" />\n";
print "\t</head>\n";
print "\t<body>\n";
$value > 5 || print "\t\t<p>value &lt; 5 #1</p>"; # $value가 5보다 크지 않다면 뒤에 나오는 명령 실행
$value < 5 && print "\t\t<p>value &lt; 5 #2</p>"; # $value가 5보다 작다면 뒤에 나오는 명령 실행
print "\t</body>\n";
print "</html>\n";
							

제어문(Flow Control)

Perl 에서 쓰이는 대표적인 제어문은 while, foreach, if등이 있구요, 그 외에 until, for, unless등이 있습니다. 그럼 하나씩 살펴보겠습니다.

while

 while()은 ()내의 조건문이 거짓이 될때까지 문장을 반복 수행합니다.

$n=100;
while ($n > 0)
{
	print "$n\n"; 
} # <- 이건 블럭문입니다. 조건이 참이면 블럭안의 문장을 수행하라는 의미죠.
					

foreach

 foreach 문은 배열을 처리할때, 아주 유용합니다. foreach 다음에 오는 배열이 널 값(아무런 값도 없을 때)일때까지 문장을 수행합니다.

@name = ("Kim", "young", "soo"); 
foreach $temp(@name)
{
	print "$temp\n";
}
					

 위 문장에서 $temp 변수는 처음에는 'kim'의 값을 가지며, 두번째는 'young'의 값을, 세번째는 'soo'의 값을 가지며, 네번째에서 $temp는 널값을 가지게 되므로 루프를 종료하게 됩니다.

 @name 배열 값의 개수가 1000개라 하더라도, 위 3줄의 예로써 모든 @name 의 값을 출력할수 있습니다.

if... elsif.... else

 if 문은 '만약 조건문이 참이라면' 의 뜻이 됩니다.

 if... elseif.... else 가 모두 쓰인 상태라면, if(만약 이것이 참이라면...) elsif(그렇지 않다면....) else(위의 두 개 모두 아니라면...) 이런 식으로 쓰입니다.

$temp = 5; 
if ($temp == 5) { print "temp is $temp"; } 
elsif ($temp == 3) { print "temp is $temp"; } 
else { print "Not found temp"; }
					

조건부 표현 (Conditional Expression)

 그럼 여기서 펄에서 쓰이는 관계형 연산자에 대해서 알아보겠습니다.

같음==eq
다름!=ne
부호를 가지는 다름<=>cmp
보다 큼>gt
보다 크거나 같음>=ge
보다 작음<lt
보다 작거나 같음<=le

파일 제어

 여기서는 펄에서 파일의 접근에 대한 방법을 알아 보겠습니다. 펄에서 파일을 열기 위해 쓰는 명령어는 open()이 있습니다. 물론 사용하신 다음에는 close()로 닫아 주셔야 하구요. 여기선 텍스트 파일에 대한 이야기를 하겠지만, dbm 파일을 이용할수 있는 dbmopen()과 dbmclose()도 있는데, 이건 나중에 하겠습니다.

open(), close()

 open() 함수는 새로운 파일 핸들을 어떤 파일에 연계시키기 위해서 사용합니다.

open(FILE, "> /etc/guest.txt"); 
close(FILE); 
open(FILE, ">> /etc/file.log"); 
close(FILE);
					

 이렇게 사용 될 수 있습니다. 위 예에서 'FILE'은 새로운 파일 핸들이고, '.../filename'은 사용 할려고 하는 파일명입니다.

 그리고 " " 안의 파일명 앞에 여러가지 기호가 쓰이는데, 이것은 파일에 접근 방법을 지정할수 있습니다. 자세한 내용은 아래에 있습니다.

'<'읽기를 위한 파일 열기(기본값)
'>'쓰기를 위한 파일 열기
'<<'이어쓰기를 위한 파일 열기
'+C<'읽기와 쓰기를 위한 파일 열기
'+>'읽기와 쓰기를 위한 파일 열기
'|'(파일 이름 앞) 파일을 명령(펄에서 파일로 전송)처럼 다룬다
'|'(파일 이름 뒤) 파일을 명령(파일에서 펄로 전송)처럼 다룬다

 open() 함수로 파일을 열었으면, 반드시 close() 함수로 닫아 주셔야 합니다.

 그리고 open(파일핸들, "파일제어기호 파일명(경로포함)"); 에서 파일제어기호와 파일명에는 콤마등의 기호가 없습니다.

이 문서는 Perl 패키지내의 pod2html를 이용하여 만들었습니다. - Kim Young Soo