[첫화면으로]Perl/순환문

마지막으로 [b]

변경사항 (가장 최근의 "다른 사용자에 의한 수정"부터) (일반적인 수정, 소소한 수정)

-1,14 +1,15
순환문 - for, foreach, while, until
<toc>
== for 순환문 ==
{{{
== # for 순환문 ==
{{{#!vim perl
for (초기화; 조건; 명령 후 취할 행동) {
  명령;
}
}}}
또는
{{{
{{{#!vim perl
for ( 1..100 ) {
  명령;
}

-16,28 +17,40
변수가 생략된 경우
{{{
{{{#!vim perl
for ( 1..10, " hello ", "world ", "again\n" ) {    # 13 개의 값이 $_ 에 각각 할당
  print;                                           # $_ 가 생략된 것으로 간주
}
}}}
== foreach 순환문 ==
예제:
{{{
== # foreach 순환문 ==
(for 로도 동일하게 쓸 수 있음. for each ... 라는 의미를 좀 더 명확히 드러낸 뿐)
{{{#!vim perl
foreach $elem ( 0..$#myArray )
{
  print $myArray[$elem];
}
foreach ( 0..$#myArray )
{
  print $myArray[$_];   # iterator 생략한 경우 $_
}
foreach $aLine (<fileHandler>) {
  print $aLine;
}
}}}
== while 순환문 ==
{{{
foreach 뒤에 있는 제어변수는 리스트의 요소의 alias이다. 그 변수의 값을 바꾸면 리스트의 원소가 바뀐다. 또한 제어변수는 foreach 루프 내에서 렉시컬 스코프가 적용되며 루프를 빠져나간 후의 그 변수의 값은 루프 전의 값이 됨에 유의<footnote(Learning Perl, Chapter 03)>
== # while 순환문 ==
{{{#!vim perl
while ( 조건 ) {
  명령; # 조건이 참인 동안 실행
}

-47,8 +60,11
} while ( 조건 );
}}}
== until 순환문 ==
{{{
== # until 순환문 ==
{{{#!vim perl
until ( 조건 ) {
  명령; # 조건이 거짓인 동안 실행
}

-58,11 +74,42
} until ( 조건 );
}}}
== 순환문 빠져나가기 - next, last, redo ==
== # 순환문 빠져나가기 - next, last, redo ==
* next - C 의 continue
* last - C 의 break
* redo - next 와 유사하나, "블럭 실행 후 취할 행동" 부분을 실행하지 않는다
== # do { BLOCK } ==
* do { BLOCK } 형태는 블럭 안의 명령들 중 마지막 명령의 값을 반환함<footnote(Perldoc:do"")>
* do { BLOCK } while ( 조건 )
* do { BLOCK } until ( 조건 )
* 위 두 가지는 BLOCK 을 한 번 실행한 후, 조건에 따라 반복을 할 것인지 결정한다.
* 그런데... 이 형태는 whlie이나 until과 달리 루프로 간주되지 않아서 next,last,redo를 쓸 수 없다.<footnote(이럴 땐 좀 펄이 싫어진다...)>
** do 블록 안 또는 밖에 추가로 블록을 구성해서 next와 last의 효과를 낼 수 있다.<footnote(Perldoc:perlsyn"")>
{{{#!vim perl
# next 를 하기 위해서는 중괄호를 이중으로 써서 안쪽에 블록 하나를 다시 만든다.
           do {{
               next if $x == $y;
               # do something here
           }} until $x++ > $z;
# last 를 하기 위해서는 바깥쪽에 블록을 만든다.
           LOOP: {
                   do {
                       last if $x = $y**2;
                       # do something here
                   } while $x++ <= $z;
           }
}}}
----
[[컴퓨터분류]]


1. for 순환문
2. foreach 순환문
3. while 순환문
4. until 순환문
5. 순환문 빠져나가기 - next, last, redo
6. do { BLOCK }

1. for 순환문

for (초기화; 조건; 명령 후 취할 행동) {
  명령;
}
또는

for ( 1..100 ) {
  명령;
}

변수가 생략된 경우

for ( 1..10, " hello ", "world ", "again\n" ) {    # 13 개의 값이 $_ 에 각각 할당
  print;                                           # $_ 가 생략된 것으로 간주
}

2. foreach 순환문

(for 로도 동일하게 쓸 수 있음. for each ... 라는 의미를 좀 더 명확히 드러낸 뿐)

foreach $elem ( 0..$#myArray )
{
  print $myArray[$elem];
}

foreach ( 0..$#myArray )
{
  print $myArray[$_];   # iterator 생략한 경우 $_
}

foreach $aLine (<fileHandler>) {
  print $aLine;
}

foreach 뒤에 있는 제어변수는 리스트의 요소의 alias이다. 그 변수의 값을 바꾸면 리스트의 원소가 바뀐다. 또한 제어변수는 foreach 루프 내에서 렉시컬 스코프가 적용되며 루프를 빠져나간 후의 그 변수의 값은 루프 전의 값이 됨에 유의1

3. while 순환문

while ( 조건 ) {
  명령; # 조건이 참인 동안 실행
}

do {
  명령; # 반드시 한 번은 실행
} while ( 조건 );

4. until 순환문

until ( 조건 ) {
  명령; # 조건이 거짓인 동안 실행
}

do {
  명령; # 반드시 한 번은 실행
} until ( 조건 );

5. 순환문 빠져나가기 - next, last, redo

6. do { BLOCK }

# next 를 하기 위해서는 중괄호를 이중으로 써서 안쪽에 블록 하나를 다시 만든다.
           do {{
               next if $x == $y;
               # do something here
           }} until $x++ > $z;

# last 를 하기 위해서는 바깥쪽에 블록을 만든다.
           LOOP: {
                   do {
                       last if $x = $y**2;
                       # do something here
                   } while $x++ <= $z;
           }


컴퓨터분류

각주:
1. Learning Perl, Chapter 03
2. Perldoc:do
3. 이럴 땐 좀 펄이 싫어진다...
4. Perldoc:perlsyn

마지막 편집일: 2008-12-28 11:20 pm (변경사항 [d])
2930 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기