빈 문자열은 거짓으로 간주되므로 $a가 공백이 아니라면 첫 번째 블록이, 공백이라면 두 번째 블록이 실행된다.
if-elsif문을 사용하면 조건문 내에서 더 많은 분기를 포함하는 것도 가능하다:
if (!$a){ # !은 NOT 연산자이다.
print "문자열은 공백이다.\n";
}elsif (length($a) == 1){ # 위가 거짓이면 이 문장이 수행된다.
print "문자열은 하나의 문자를 가지고 있다.\n";
}elsif (length($a) == 2){ # 위의 것들이 거짓이면 이문장이 수행된다.
print "문자열은 두개의 문자를 가지고 있다.\n";
}else{ # 위의 모든 것이 거짓이면 이문장이 수행된다.
print "문자열은 세자 이상의 문자를 가지고 있다.\n";
}
$a가 공백인 경우 첫 번째 블록이 수행되며($a앞의 !에 주의한다), $a가 하나의 문자를 갖는다면 두 번째 블록에 2개의 문자를 갖는 다면 세 번째 블록이, 세 개 이상의 문자를 갖는다면 마지막 else 블록이 수행된다.
if문을 반대의 조건으로 수행시키기 위해 unless문을 사용할 수 있다.
연습 - 방명록
방명록 FORM(guest.html)에는 작성자의 이름, 전자우편, 홈페이지, 의견을 입력하도록 되어있다. 그러나 일반적으로 전자우편과 홈페이지는 없는 사람이 있을 수도 있으므로 이름과 의견을 검사해서 이름과 의견이 모두 있는 경우에는 방명록을 기록하고 없는 경우에는 원래의 방명록 폼을 출력하도록 guest.cgi를 변경하라.
방명록은 다음과 같은 형식으로 구성된다.
if($FORM{name} ne '' && $FORM{comment} ne '') {
&save_guestbook; # 앞에서 작성한 방명록을 저장하는 부분
print "location: $guesturl\n\n";
}else {
print "content-type: text/html\n\n";
&guest_form; # guest.html의 폼을 그대로 출력.
# 단 value 속성으로 이전 값을 유지해야 함
}
&save_guestbook은 앞서 작성한 CGI에서 파일을 저장하는 부분을 의미한다. 사용자 입력이 적당한 경우 사용자 입력을 파일로 저장하고 저장된 결과를 보여주기위해 저장된 결과(guestbook.html)를 location: 헤더를 이용해서 호출하는 부분이다.
Location: 헤더의 URL을 가상 절대 경로로 지정하는 경우, 최종적인 URL은 guest.cgi가 된다. 이 경우 Ctrl-R을 누르면 같은 데이터가 반복적으로 삽입되므로 가급절 절대 URL를 사용하는 것이 좋다.
&guest_form은 방명록 폼(guest.html)을 CGI가 다시 출력하는 부분이다. 다만 방명록 폼을 다시 출력할 때에는 <INPUT> 태그의 value 속성을 이용해서 사용자 입력을 유지해야 한다.
주의:
이 방명록은 두가지의 CGI 출력(Location:, Content-Type:)을 사용하지만 실제 출력되는 것은 이들중 하나만 출력된다는 것에 주의하기바란다.