(1) if ~ else 구문

 

[형식1]

if ( 조건 )

{

             조건에 따른 처리;

}

else

{

             조건에 따른 처리;

}

 

[형식2]

if ( 조건 )

{

             조건에 따른 처리;

}

elsif ( 조건 )

{

             조건에 따른 처리;

}

else

{

             조건에 따른 처리;

}

 

if ~ else 구문은 어떤 조건을 만족하는지를 검사하고 만족할 때는 if 구문 바로 아래에 있는 문장이 실행되고 만족하지 않을 때에는 else 구문을 수행한다. else 구문은 생략할 수 있으며 [형식2]에서 처럼 if ~ else를 반복해서 사용할 수도 있다. if 구문 다음에 else if를 함께 사용할 때는 elseif가 아니고 elsif인 점을 주의하기 바란다. 그리고 elsif if else 구문 사이에 있어야 한다.

 

Perl에서의 if 구문은 C if 구문과 비슷하다. 하지만 주의할 점은 Perl에서는 조건에 따른 처리 문장이 한 줄일 경우에도 { }를 사용해야 한다는 것이다.

 

[예제 6.7.1]

$a=5;

if ($a < 5)

{

             print 5보다 작다.\n;

}

else

{

             print 5보다 크거나 같다.\n;

}

[실행 결과]

5보다 크거나 같다.


앞의 예제에서 $a 5라는 값이 들어가 있고 if 문에서 $a 5보다 작은지를 검사한다. $a 5보다 작지 않기 때문에 if 구문이 수행되지 않고 else 구문이 수행되므로 5보다 크거나 같다.라는 문장이 출력된다.

 

if 문은 다음과 같이도 사용할 수 있다.

 

$a=5  if ($a < 5);

 

간단한 조건일 경우에는 위와 같은 방식으로 하면 간단하게 작성할 수 있다.


 

(2) unless 구문

 

[형식]

unless ( 조건 )

{

             조건에 따른 처리;

}

 

 

unless 구문은 if와 반대되는 말이라고 생각하면 된다. if는 어떤 조건이 참일 때 수행하는 것이지만 unless는 거짓일 때 수행된다.

 

unless (1 == 2)

{

             print Its wrong\n;

}

 

앞의 예를 보면 조건에서 1 2는 같지 않기 때문에 거짓이 된다. 거짓이면 블록 안의 내용을 수행하므로 Its wrong 이라는 결과가 출력된다.

 

if 문과 마찬가지로 unless도 다음과 같이 줄여서 사용할 수 있다.

 

$a = 1 unless $a;

 

위의 예는 $a에 값이 없을 경우에 1을 대입하라는 문장이다.

 

 

(3) while

 

[형식]

while (조건)

{

             조건에 따른 처리;

}

 while 문은 조건이 참일 경우에 블록 안의 내용을 반복해서 수행한다. 즉 조건이 참이면 블록 안의 내용을 순서대로 수행하고 다시 while 문이 있는 조건으로 돌아가서 다시 조건이 참인지 검사를 한다. 조건이 참일 경우에는 다시 불록의 내용을 수행하고 거짓이라면 수행을 중단하게 된다.

 

[예제 6.7.2]

$i=1;

$sum=0;

while ($i <= 10)

{

             $sum+=$i;

print $i : $sum\n;

}

print Sum : $sum\n;

 

 

[실행 결]

1 : 1

2 : 3

3 : 6

4 : 10

5 : 15

6 : 21

7 : 28

8 : 36

9 : 45

10 : 55

Sum : 55

 

앞의 예제는 1부터 10까지 1씩 증가하면서 값을 더하는데 각 단계별로 중간 합계를 보여주는 소스이다. while ($i <= 10)에서 $i는 처음에는 1이기 때문에 참이 되어 블록의 내용을 수행하고 다시 조건으로 돌아오면 $i 2가 되어있다. 여전히 10보다 작아서 참이 되므로 계속 반복하다가 $i 10일 때 마지막 결과를 출력하고 $i 11이 되면 조건을 만족하지 못해서 더 이상 블록의 내용을 수행하지 않고 while 문을 빠져나가게 된다.

 

 

(4) until

 

[형식]

until (조건)

{

             조건에 따른 처리;

}

 

until while과 반대로 조건을 만족할 때까지 수행하게 된다. 즉 조건이 거짓일 때 수행을 한다. if unless의 경우를 비교해 보면 이해가 쉽게 될 것이다.

 

(5) for

 

[형식]

for (초기값 설정; 끝나는 조건; 반복처리;)

{

             조건에 따른 처리;

}

 

for 문의 조건은 세 부분으로 이루어 진다. 첫 번째는 초기에 설정할 구문을 적는다. 두 번째는 for 문의 수행할 조건을 검사한다. 참일 경우에 블록의 내용을 수행하고 거짓이면 중단한다. 세 번째는 for 루프(loop)가 반복될 때마다 수행되는 구문이다. 예를 들어보자.

 

[예제 6.7.3]

$sum=0;

for ($i=1; $i <= 10; $i++)

{

             $sum+=$i;

print $i : $sum\n;

}

print Sum : $sum\n;

[실행 결]

1 : 1

2 : 3

3 : 6

4 : 10

5 : 15

6 : 21

7 : 28

8 : 36

9 : 45

10 : 55

Sum : 55

 

금방 눈치 챘을지도 모르지만 앞의 예제 결과는 while 문에서 보았던 예제와 결과가 같다. while 문을 이용한 소스를 for 문으로 바꾼 것이다. 하나씩 따라가 보자. 일단 for 문에 도착하면 $i=1;이 수행된다. 그리고 $i <= 10; 조건을 검사한다. 조건을 만족하기 때문에 블록 안으로 들어가 수행을 한다. 수행을 마치면 $i++;이 수행된다. $i 1이 증가하여 2가 되었고 다시 $i <= 10 조건을 검사한다. 여전히 만족하므로 블록의 내용이 계속 수행된다. $i 11이 되면 더 이상 조건을 만족하지 않기 때문에 블록을 수행하지 않고 밖으로 빠져나가 마지막 print 문을 실행하게 된다.

때에 따라서는 while 문을 사용하는 것 보다 for를 사용하는 것이 더 유용할 때가 있다. 개발할 때에 어느것이 적절한지 판단하여 사용하기를 바란다.

 

 

for 문을 다음과 같이 사용할 수도 있다.

 

             for ($i=1, $sum=0; $i <= 10; $i++)

 

각 조건을 입력할 때는 콤마(,)를 이용해서 여러 가지를 나열할 수도 있다. 그러나 너무 많은 조건을 나열하면 소스가 복잡하여 별로 보기 좋지 않으니 적절히 사용하는 것이 좋다.

 

(6) foreach

 

[형식]

foreach  로컬 변수(리스트)

{

             조건에 따른 처리;

}

루프를 이용하여 리스트에 저장된 요소에 대해 점검한다. foreach에 대한 수행 방법은 다음의 두 가지 예를 통해서 비교해 볼 수 있다.

 

[예제 6.7.4]

@list=(1,2,3,4,5);

 

$i=0;

$list_size=@list;

 

while ($i < $list_size)

{

print "$list[$i]\n";

$i++;

}

[예제 6.7.5]

@list=(1,2,3,4,5);

 

foreach $i (@list)

{

print "$i\n";

}

 

[실행 결]

1

2

3

4

5

 

앞의 두 가지 예제의 결과는 같다. 그런데 두 번째 예제 소스를 보면 첫 번째 예제 소스보다 훨씬 간단하다. 이런 점이 foreach의 편리함이라고 할 수 있다. 실행되는 과정을 살펴보면 우선 @list에는 1부터 5까지의 5개의 숫자가 들어있다. foreach $i (@list) @list에서 각 요소의 값을 하나씩 꺼내서 $i에 저장한 다음에 블록 안의 내용을 수행하는 것이다. 수행은 @list의 모든 요소를 하나씩 다 꺼내서 사용하게 되므로 @list의 크기 만큼 수행하는 것이다.

여기서 $i는 로컬 변수로 foreach 문이 수행되는 동안에만 유효한 변수이다. foreach 문 이전에 $i를 사용하고 있었더라도 foreach 문 수행 후에 기존의 $I 값은 영향을 미치지 않는다.

 


(7) do

 

[형식]

do {

             조건에 따른 처리;

} while (조건)

또는

 

} until (조건)

 

지금까지 나왔던 루프 프로그램에서는 루프를 실행하기 전에 조건식을 먼저 판별하였다. 그러나 do 문을 사용하게 되면 일단 블록 안의 내용을 먼저 실행하고 조건을 판별하게 된다.

 

[예제 6.7.6]

$i=1;

do {

print $i\n;

$i++;

} while ($i <= 10);

 

[실행 ]

1

2

3

4

5

6

7

8

9

10

일단 처음에는 아무런 조건 없이 블록의 내용을 수행한다. $i는 처음에 1이었다가 한 번 수행이 되고 2가 되었다. 수행이 완료되면 while 문에서 $i <= 10 조건을 만나서 만족하는지 여부를 판단한다. 조건을 만족하므로 다시 블록의 내용의 수행을 반복하다가 $i 11이 되면 수행이 끝나고 while 문에서 조건을 만족하지 못하므로 수행을 중단한다.


 

(8) last

 

[형식]

last;

 

일반적으로 루프를 빠져 나오려면 처음이나 끝부분에 있는 조건문으로 판별하여 만족하지 못할 때 루프를 빠져 나오게 된다. 그러나 필요에 따라서 루프 수행 도중에 빠져 나와야 할 상황이 있을 수 있다. 이럴 때는 last 명령을 사용한다. 루프 안에서 last 명령을 사용하면 더 이상 조건을 비교하지 않고 강제로 루프를 빠져 나오게 된다.

 

[예제 6.7.7]

for ($i=1, $sum=0; $i <= 10; $i++)

{

             $sum+=$i;

             if ($sum > 20)

             {

                           print Current Sum : $sum\n;

                           last;

             }

}

 

[실행 결]

Current Sum : 21

 

앞의 예제를 살펴보면 1부터 10까지의 합계를 구하는 도중에 합계가 20이 넘어가면 중단을 하고 합계를 출력하는 프로그램이다. 루프 안의 조건에서 $sum > 20을 만족하는 시점에 결과를 출력하고 last 명령으로 루프를 종료했다. last 명령을 만나면 더 이상 조건을 판별하거나 블록 안의 내용을 수행하지 않게 되고 무조건 루프 밖으로 빠져 나가게 된다.

 


(9) next

 

[형식]

next;

 

last는 루프의 실행을 중지시키는 명령이다. 그러나 next를 사용하면 실행중인 루프를 중단하고 다음 루프로 건너 뛸 수 있다.

 

[예제 6.7.8]

for ($i=1; $i <= 10; $i++)

{

             if ($i % 2 == 1)                  # 홀수일 때

             {

                           next;

             }

             print $i\n;

}

[실행 결과]

2

4

6

8

10

 

앞의 예는 1부터 10까지의 정수 중에서 짝수만 출력하는 프로그램이다. for 문에서는 1부터 10까지 10번의 루프를 돌게 되어 있고, 그 값을 출력하게 되어 있다. 루프에 들어가면 if 문에서 $i를 나머지 연산자 %를 사용하여 2로 나누어 본다. 2로 나누어서 나머지가 1이면 홀수이기 때문에 next 문을 사용해서 숫자를 출력하지 않고 다음 루프로 넘어가게 된다. next 문은 주로 루프에서 예외 사항 같은 경우에 적용할 수 있다.

 

 

Posted by OJJ