이런저런 문제들로 정신없는 와중에 새로운 일을 떠 맡았다. PHP와 펄을 이용한 간단한 웹 프로그래밍이었는데, 두가지 경우 모두 FORM을 이용해서 값을 넘겨받아야 했다. PHP의 경우는 그냥 간단히 name과 동일한 변수로 받아서 해결되었지만, 펄의 경우에는 약간 해줘야할 것이 있어서 머리가 아팠다. 아무래도 PHP처럼 원래 CGI 전용으로 나온 스크립트가 아니라서 그런가보다.

어쨌든 아래와 같은 방법으로 해결했다.

예제 : 간단한 사칙연산 프로그램

#!/usr/bin/perl

print "Content-type: text/htmlnn";
&parse;
$first = $FORM{'first'};
$second = $FORM{'second'};

print "<html><head><title>계산 결과</title></head><body>";
print "<h1>계산 결과</h1><br />";
print "<table><tr><td>더하기</td><td>";
print $first+$second;
print "</td></tr><tr><td>빼 기</td><td>";
print $first-$second;
print "</td></tr><tr><td>곱하기</td><td>";
print $first*$second;
print "</td></tr><tr><td>나누기</td><td>";
print $first/$second;
print "</td></tr><tr><td>나머지</td><td>";
print $first%$second;
print "</td></tr></table></body></html>";

sub parse {
  if($ENV{'REQUEST_METHOD'} eq "GET") {
      $buffer = $ENV{'QUERY_STRING'};
  }
  else {
      read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  }

  @pairs = split(/&/,$buffer);

  foreach (@pairs) {
      ($name, $value) = split(/=/,$_);
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

      $FORM{$name} = $value;
  }
}

parse 부분이 핵심 부분인데, 거의 정형화되어있어서 다들 copy&paste한다고 한다.

'Developing' 카테고리의 다른 글

USACO Training - Friday the Thirteenth  (0) 2006.09.12
PERL에서의 웹 프로그래밍  (0) 2006.06.03
USACO Training - What Time Is It?  (0) 2006.05.15
USACO Training - Barn Repair  (0) 2006.05.09

+ Recent posts