Programming Language Report

Tcl/Tk

(Tool Command Language/ Tool Kit)

&

Perl

(Practical Extraction and Report Language)

담당 교수: 전자계산학과 최영근

1997년 9월 10일

전자공학과 95101132 이홍기

Tcl/Tk와 Perl

0. 차례

1. 개요

2. Tcl/Tk

3. Perl

4. CGI

5. 참조

1. 개요

Tcl/Tk는 버클리의 캘리포니아대학(University of California at Berkely)의 John Outerhout가 개발한 스크립트 언어이다. Tcl/Tk는 X-WINDOWS 프로그래밍 실습을 위해 고안된 간단명료한 언어로 □티클/티케이□라고 발음한다. Tcl/Tk는 실제적인 일반적인 언어가 갖는 문법을 담당하는 Tcl(Tool Command Language)과 그래픽 환경에서의 윈도 작성에 관련된 문법을 담당하는 TK(Tool Kit)로 이루어져 있다. 현재는 워크스테이션 업체로 유명한 SUN Microsystems 사(이후 SUN사)의 연구실(Sunlabs)에서 버클리로부터 라이센스받아 지속적인 개발을 하고 있다. 스크립트 언어로서는 Perl과 함께 강력한 문자열 처리기능을 가지고 있으며-모든 데이터 타입이 문자열이다.- WWW쪽과 연계하여 자바의 애플릿과 유사한 형태의 서비스로 거의 흡사한 기능을 발휘하는 티클렛이 나와 있고 UNIX 응용프로그램에서도 많이 채용하고 있는 상태다. Perl과 마찬가지로 최근 버전에서는 속도향상을 위한 컴파일러가 제공되기도 한다.

Perl은 Randal L. Schwartz가 만들었으며 Practical Extraction and Report Language의 약자이다. Perl은 문서 형태의 데이터로부터 필요한 정보들을 추출(Extraction), 그 정보를 바탕으로 새로운 문서를 구성(Report)하는데 아주 잘 맞는 언어이다. 다수의 UNIX 응용 프로그램이나 시스템 관리를 위하여 사용하기도 한다. 이 언어가 C, sed, awk, sh등의 특징들을 결합한 스크립트 언어이기 때문에 여러 가지 문자열 처리와 스크립팅 언어 작성이 용이하다. Tcl/Tk와 마찬가지로 속도향상을 위한 컴파일러가 존재한다. 인터넷의 월드와이드웹이 대중화 되면서 널리 쓰이기 시작한 CGI(Common Gateway Interface) 규약에 근거한  게이트웨이 프로그래밍에서도 상당히 많이 사용되고 있다.

1997년 8월 18일자로 Tcl/Tk 8.0이 발표되었다. SUN사에서는 http://sunscript.sun.com/이라는 URL을 개설하고 Tcl/Tk를 주요 개발 스크립트언어로 밀고 있다. Perl은 5.004_01버전까지 발표되었다. 아래의 URL에서 구할 수 있다.

http://sunscript.sun.com/TclTkCore/

http://language.Perl.com/info/software.html

두 언어는 분명 유사한 부류의 스크립트 언어이지만 사용하는 영역이 어느정도는 양분화 되어 있다. 스크립팅 수준에서의 거의 모든 기능을 두 언어 모두 처리해주지만 윈도프로그래밍과 연계한 작업은 Tcl/Tk로 많이 처리하고 다소 복잡한 문자열을 다루다는가 하는 작업들은 Perl이 대다수이다. 물론 CGI를 위한 게이트웨이 언어작성에서 두가지 중 어떤 것을 선택하더라도 다른 어떤 언어들에 비해서도 쉬우면서도 뛰어난 문자열처리를 지원하는 것은 확실하다고 할 수 있다.

또한 이식성이 뛰어나다는 장점을 갖고 있다. Tcl/Tk는 UNIX, WINDOWS, Macintosh, Powermac, OS/2를 지원하며 Perl 또한 UN*X, MVS, VMS, MS-DOS, Macintosh, OS/2, Amiga, Windows NT를 지원하므로 완벽한 이기종간 이식성이 뛰어나다. (이기종간 소스코드 수정이 거의 필요 없다.) 이후부터 Tcl/Tk와 Perl에 대한 소개와 참고자료로 CGI에 대한 설명이다.

2. Tcl/Tk

SUN 사에서 현재 개발하고 배포하고 있다. 앞서 설명한 바와 같이 쉽고 간결하다. 데이터 형식은 문자열로 처리되며, 강력한 리스트 구문 처리 기능을 함께 가지고 있다. 작성후에는 C나 C++과의 인터페이스가 가능하고, 실제로 C/C++에서 내부적으로 구현되는 부분은 C/C++자체로 처리해주고 어렵게 작성되는 윈도부분, 예를 들면 MOTIF 등을 이용한 X-WINDOWS 응용프로그램 작성시의 어려움을 TK를 사용하여 간결히 해결할 수 있다. 컴파일러/인터프리터를 병행하여 쓸 수 있으며 그 반대로 내부적인 문자열 처리를 간결히 하기 위해 Tcl부분을 인터프리팅하면서 컴파일하면서 포함할 수도 있다. 물론 JAVA와의 인터페이싱도 가능하다.

Tcl/Tk는 여러 가지로 개발이 진행되고 있고, 객체 지향 성격의 incr Tcl의 개발도 함께 진행되고 있고, 각종 데이터베이스와 연결할 수 있는 데이터베이스 라이브러리와 네트워크 프로그래밍에 필요한 Socket 연결 예약어도 포함하고 있다. 물론 Perl도 마찬가지이다.

여기서는 문법에 관련한 내용들은 간단히 소개 정도로 하고 응용된 프로그램 형태로 간단한 CGI 라이브러리를 소개하기로 한다.

2.1 실행하기

모든 스크립트 언어가 그렇듯이 명령행 해석기, 즉 인터프리터가 필요하다. Tcl/Tk는 크게 Tcl과 TK의 두부분으로 나누어 진다고 했다. tclsh과 wish로 각각 나뉘어 진다. UNIX의 경우 실제로 *.tcl로 끝나는 Tcl/Tk 소스코드의 제일 첫줄에는 아래와 같은 구문이 들어가게 된다.

#!/usr/local/bin/tclsh

#!/usr/local/bin/wish

또한 명령행 해석기 자체로도 이용이 가능하다 커맨드라인에서 다음과 같이 실행하면 인터랙티브한 환경에서 사용가능하다..

%/usr/local/bin/tclsh

윈도 환경에서는 다음과 같이 사용한다.

C:>\Tcl80\TclSH.EXE test.tcl

2.2 Hello, World! 예제

모든 언어를 설명할 때 관용적으로 드는 예가 Hello, World!일 것이다. Tcl/Tk에서는 다음과 같은 형태로 Hello, World!를 기술할 수 있다.

[helloworld.tcl의 소스]

#!/usr/local/bin/tclsh

puts stdout "Hello World!\n"

exit

Tk에서의 버튼 생성 예제

Hello World! 버튼을 누르면 Hi! 버튼으로 바뀐다.

[helloworld2.tk의 소스]

#!/usr/local/bin/wish

button .b1 -text "Hello World!" -command {puts "Hi!" }

pack .bl

2.3 기본 문법

Tcl의 문법 정의는 다음과 같다.

command arg1 arg2 ...

변수 지정방식

데이터타입은 모두 문자열이다.

set 변수명 변수값1 변수값2

예)

set a "1"

set b 1

* 위의 두 변수에는 같은 형태의 문자열 데이터가 들어가게 된다.

계산식

변수나 숫자를 가지고 계산을 할 경우에 사용된다.

expr 계산식

배열과 리스트

배열과 리스트의 두가지 형태를 지원한다.

예)

배열의 지정

set Arr(0) 1

set Arr(1) 2

puts stdout "$Arr(0) - $Arr(1)"

리스트의 지정

set a [list a b c d e f]

그밖의 반복, 제어, 비교 구문은 일반적인 문법과 유사하다.

Tk의 문법 정의는 다음과 같다.

command name 인수1 인수2 ...

button 위젯

버튼을 생성하고 버튼이 눌려졌을때의 명령을 정의한다.

button name -text "이름□ -command { 명령 }

예)

button .bl -text "TEST"

button 위젯 이외의 위젯들이다.

button, canvas, checkbutton, entry,

frame, label, listbox, menu, menubutton,

message, radiobutton, scale, scrollbar, text,

toplevel

pack

정의된 위젯을 화면에 보여준다.

pack name

예)

button .bl -text "TEST"

pack .bl

2.4 Tcl을 이용한 CGI 라이브러리

다음은 Tcl을 이용한 CGI 라이브러리의 예이다. C/C++로 작성할 경우 CGI 규약에 명시된 인터페이스 규약과 전송방식(METHOD)에 맞게 하려면 최소 2백 라인정도의 코드가 필요하지만 Tcl로 작성하였을 경우에는 아래와 같이 1백 라인 이하의 코드로 간결히 표현 할 수 있다.

CGI(Common Gateway Interface)의 규약을 만족하는 라이브러리로, Tcl/Tk라는 스크립트 언어용으로 만들어진 것이다. CGI의 기본 규약에 충실함으로 이해하기 쉽고 요청방식(REQUEST_METHOD)에 상관없고 넘겨받은 인자값이 Tcl의 변수로 생성되기 때문에 사용이 비교적 쉽다. 아래는 소스코드 전문이다. 아래 CGI 라이브러리는 다음의 URL에 존재한다. CGI에 관한 소개는 4장을 참조하기 바란다.

http://www.kwangwoon.ac.kr/~genius/chongabook/webtech/tcl-cgilib.html

-------------------------------< START Cut here >------------------------

# This is Tcl CGI lib

#

#

# Add your CGI PROGRAM CGI-LIB routine under the tclshell(#!/usr/bin/tclsh).

#

# And then you can use receiving values after '#Tcl CGI-LIB END' line.

#

# IF you send name=a value=2, then it will be created each variable and

#                             inserted its own value.

#    example)  a=2

#             -> $a has 2

#

# IF you send multipul choice value, then it will be create variable as

#                             list type and added value with _.

#

#    example)  a=2&a=3&a=4

#             -> $a has 2_3_4

#

# Tcl CGI-LIB START

#

# created by Hongki Lee at 1996.5

#            kwangwoon univ. network lab.(k-net)

#

# If you any question about this, mailto genius@www.kwangwoon.ac.kr

#

# Copyright notice:

#   Distribution and Editing for this source are all free.

#   But if you edit this source code, please inform me about it.

#

# method POST & GET

if {$env(REQUEST_METHOD)=="POST"} {

gets stdin query

} else {

set query $env(QUERY_STRING)

}

set querylst [split $query &]

set flag ""

foreach token $querylst {

set i "0"

while { $i != [string length $token] } {

set achar [string index $token $i]

if { $achar == "+" } {

set achar " "

}

if { $achar == "%" } {

incr i

set prefix "0x"

append prefix [string range $token $i [expr $i+1] ]

set achar [format "%c" $prefix ]

incr i

}

append rtoken "$achar"

incr i

}

set tmp [string range $rtoken 0 [expr [string first "=" $rtoken]-1 ]]

if {$tmp != $flag} {

set $tmp [string range $rtoken \

[expr [string first "=" $rtoken] +1 ] end]

} else {

append $tmp "_[string range $rtoken \

[expr [string first "=" $rtoken] +1 ] end]"

}

set flag $tmp

unset rtoken

}

## Tcl CGI-LIB END

--------------------------------< END Cut here >------------------------

* 사용방법

cgilib.tcl을 한번 거치게 되면 전송방식(POST나 GET)에 상관없이 해석된다. 해석이 끝난후의 라인이후부터는 변수로 바로 사용할 수 있다. 일반적인 INPUT 태그의 text가 type이나 hidden이면 한 변수당 한가지 변수값이 들어온다. (단, 각 type에 값이 없을경우에는 변수자체가 생성되지 않는다.)

<INPUT type=text name=address> (HTML part)

<INPUT type=hidden name=phone value="940-5076"> (HTML part)

puts stdout $address (CGI part)

puts stdout $phone (CGI part)

체크박스(checkbox)를 이용한 다중선택시의 값은 a_b_c_d와 같은 형식으로 "_" 문자로 구분되어 한 변수명에 입력된다. 다음을 살펴보자.

http://www.kwangwoon.ac.kr/cgi-bin/test.cgi?a=2&a=3&a=4 (URL에서 다중선택)

puts stdout $a (CGI part)

2_3_4 ($a에 입력된 값)

<INPUT type=checkbox name=b value=1 checked> (HTML part)

<INPUT type=checkbox name=b value=2 checked> (HTML part)

<INPUT type=checkbox name=b value=3 checked> (HTML part)

puts stdout $b (CGI part)

1_2_3_4 ($b에 입력된 값) $a에 1_2_3_4라는 값이 변수에 들어왔을 경우의 처리방법은 다음과 같다.

# 변수내용의 _를 모두 공백으로 치환하고 리스트형식으로 바꾼다.

set a [split $a _ ]

# 리스트인 $a를 각각의 원소별로 루프반복

foreach token $a {

puts stdout "$token<BR>"

}

* 사용예제

예제를 살펴보자, HTML에서 넘어온 값을 받아 바로 화면에 출력하는 예이다. 맨 윗줄은 CGI 프로그램이 이후에 포함할 문서에 대한 정보를 가지는 헤더이다. (cgi소스에서 Content-type부분이다. 단, cgilib.tcl은 해당 cgi 소스와 같은 디렉터리에 있음을 가정한다.)

[hellocgi.html의 소스 ]

<HTML>

<BODY>

<FORM action=/cgi-bin/hellocgi.cgi method=post>

이름 <INPUT type=text name=name><BR>

성별 <INPUT type=radio name=sex value=M checked>남

<INPUT type=radio name=sex value=F>여<BR>

취미

<INPUT type=checkbox name=hobby value=1>당구

<INPUT type=checkbox name=hobby value=2>농구

<INPUT type=checkbox name=hobby value=3>축구

<INPUT type=checkbox name=hobby value=4>음악감상

<INPUT type=checkbox name=hobby value=5>영화감상

<BR>

</FORM>

</BODY>

</HTML>

[hellocgi.cgi의 소스]

#!/usr/bin/tclsh

#Loading Tcl CGI library

source ./cgilib.tcl

#User Coding Area

puts stdout "Content-type: text/html\r\n"

puts stdout "<BODY>"

puts stdout "이름 - $name <BR>"

puts stdout "성별 - $sex <BR>"

puts stdout "취미 - $hobby <BR>"

puts stdout "</BODY>"

2.5 Tclets

http://sunscript.sun.com/demos에서 웹브라우저 플러그인을 받을 수 있다. Tclets이란 Tcl/Tk로 만든 그래픽 응용 프로그램을 웹브라우저 상에서 돌아가도록 만든 것이다. 자바 애플릿만큼의 기능을 하지만 소스코드는 상당히 작다. 위의 URL에서 Tclets 데모를 볼 수 있는데, 상업용 소프트웨어 뿐만 아니라 그래픽 슈팅 게임을 구현한 예제도 있다.

3. Perl

Perl은 Randal L. Schwartz가 만든 Practical Extraction and Report Language라는 언어로 문서 형태의 데이터로부터 필요한 정보들을 추출(Extraction), 그 정보를 바탕으로 새로운 문서를 구성(Report)하는데 아주 잘 맞는 언어라고 1장 개요에서 이미 설명하였다. 월드와이드웹에서 사용하는 CGI프로그래밍 언어로는 가장 최적이라는 말을 듣고 그만큼 많은 응용 프로그램들이 많이 나와 있다. Tcl/Tk 설명할때에도 언급한바 있지만, 데이터베이스 연결을 위한 거의 모든 데이터베이스 라이브러리가 제공되고 있다. Perl을 이용한 수많은 UNIX 시스템 관련 프로그램과 응용 프로그램에 사용되고 있다.

Perl 5에서부터는 인터프리터가 완전히 다시 만들어졌고, 객체 클래스를 만들기 위한 객체지향 형태를 지원하며 C/C++에서 Perl 구문을 쓰거나 Perl에서 C/C++구문을 쓰기가 쉬워졌다.

3.1 실행하기

Perl도 Tcl/Tk와 마찬가지로 명령행 해석기인 인터프리터가 필요하다. UNIX의 경우에는 보통 서버에 지정된 경로를 Perl의 소스코드 맨 처음에 써주어야 한다.

#!/usr/local/bin/Perl

UNIX환경에서는 다음과 같이 실행한다.

%chmod +x test.pl

%./test.pl

WINDOWS 환경에서는 다음과 같이 실행한다.

C:>\Perl5\BIN\Perl test.pl

3.2 Hello World! 예제

[helloworld.pl의 소스]

#!/usr/local/bin/Perl

print "Hello World!\n";

3.3 기본 문법

대입형의 경우

피수식어 = 수식어 ;

변수 선언

$변수 = 변수값 ;

예)

$a = "1";

$b = 1;

Tcl/Tk와는 달리 a와 b는 서로 다른 데이터 타입이다.

숫자의 경우는 모두 실수형으로 인식한다.

배열

배열의 머리에는 $가아닌 @를 붙인다.

$#배열명을 하면 인덱스 개수를 반환한다.

예)

@myarray;로 선언하고 사용할때에는

$myarray[0] = 0;

$myarray[1] = 5;

$myarray[2] = "I do not want a number but a long long long string.";

$myarray[3] = 300;

print $myarray[2], "\n";

print "$myarray[2]\n";과 같이 나타냅니다

해시(Hash)

관계형 배열이라고도 한다. 킷값을 가지고 내용을 받아들인다.

%해시명 = (키1, 킷값1, 키2, 킷값2 .. ) ;

예)

%myhash = ( "apple", 3, "pear", 10, "banana", 4, "monkey", 2 );

$howmany = $myhash{ "banana" }  # returns 4

$howmany = $myhash{ "apple" }   # returns 3

그외의 문법들은 다른 언어들과 유사하므로 생략한다.

3.4 Perl CGI 라이브러리 예제

4장에서 CGI에 대한 전반적인 개념을 설명하였으므로 생략하기로 한다. 아래는 매우 간단한 예제로 웹브라우저로부터의 전송방식이 GET인 것에 대한 간단한 CGI 처리 구문이다.

[cgilib.pl의 소스]

#!/usr/bin/Perl

MAIN: {

print "Content-type: text/html\n\n";

print "<HTML><HEAD><TITLE>GET 변수</TITLE>□;

print "</HEAD><BODY>";

print "<H1>GET Method 변수</H1>";

print "다음 변수들이 보내졌습니다.";

print "<UL>";

$request = $ENV{'QUERY_STRING'};

$rqpairs = split (/[&=]/,$request);

foreach (%rqpairs) {

tr/+/ /;

s/%(..)/pack("c",hex($1))/ge;

}

while (($key,$value) = each %rqpairs) {

print "<LI>$key = $value \n";

}

print "</UL>";

print "End of variables.";

print "</BODY></HTML>";

exit 0;

}

앞서 설명한 CGI의 규약에 의한 GET 방식의 문자열을 디코딩후 값을 내보내주는 예제이다. TCL/TK의 구문과 비교해서 문자열 처리가 훨씬 간결한 것을 볼 수 있다. Perl의 코딩은 C의 구조와 유사하다.

4. CGI(Common Gateway Interface)

홈페이지를 제작할 때에는 기본문서인 HTML(HyperText Markup Language)을 이용하여 만들며 문서 치장언어라고도 말하기도하는데 그것은 HTML을 이용한 홈페이지 제작에는 한계를 안고 있음을 의미한다. HTML을 가지고 홈페이지를 작성했다면 이미 만들어진 그 페이지는 정적(Static)인 상태로 직접 수정해주지 않는 한 영원히 바뀌지 않는 페이지가 되어 버린다. CGI의 역할이 바로 정적인 HTML을 동적으로 만들어주는 기능을 하는 것이라 보면 되겠다.

CGI는 Common Gateway Interface라 풀어 쓸 수 있다. 뒤에 보이는 Interface라는 단어에서 의미하는 □연결부분□이라는 뜻과 같이 상호연결에 필요한 어떤 것이라 할 수 있겠다. 예를 들어 어떤 프로그램과 프로그램을 연결하는 중간 매개체의 역할을 담당하는 프로그램이 있다면, 이것을 연결 프로그램(Interface Program)이라 할 수 있겠다. 그렇다면 CGI는 어떻게 수행될까? CGI는 특정한 프로그램이나 출력되는 값에 의해, 바로 기존의 프로그램을 이용해 출력한 결과값(일반적인 문서자료)을 받아서 CGI에 의해 HTML 형식에 맞추어 변환된 자료를 웹서버에 넘겨주는 기능을 하고 있다. 물론 넘겨주는 것은 보통 HTML 문서형식이다. 다음은 CGI에 대한 흐름도이다.

[그림] CGI 흐름도

위와 같이 데이터베이스나 다른 응용 프로그램에 접근하여 자료를 받아와서 웹서버에서 처리 가능한 형태, 보통 HTML형식으로 보내주면 웹서버에서 다시 브라우저로 보내주는 형태이다. 이런 CGI는 어떤 프로그래밍 언어로 만들어질까? 정답은 어느것이든 상관없다. 스크립트 언어인 Perl, Tcl/Tk와 컴파일 언어인 C, Visual Basic, Delphi 심지어 Java로도 만들어질 수 있다. 단지 스크립트 언어인 경우는 프로그래밍 하기엔 편하지만 수행 속도면에서는 단점이 될 수도 있다. 하지만 단순한 기능을 가진 CGI 프로그램은 수정하기가 용이한 스크립트 언어로 많이 만들어지고 있다.

CGI에서 화면을 치장하고 표현할 수 있는 한계는 바로 HTML의 한계와 결부된다. 지금에 이르러서는 자바 애플릿(JAVA applet) 등에 의해 CGI의 기능이 점점 보완되어 가고 있긴 하지만, CGI를 이용한 여러 가지 검색서비스나 웹비비에스에서는 CGI를 더 많이 쓰고 있다. 요즘은 자바스크립트나 비베스크립트(Visual Basic 스크립트: VB 스크립트)와 같은 스크립트 언어를 HTML 문서에 삽입하여 여러 가지 동적이고도 다양한 기능을 넣을 수 있다. 자바스크립트나 비베스크립트의 경우는 현재로서는 HTML 문서만을 위한 언어로 개발되었지만 강력한 기능을 가지며 CGI 프로그램과 자바 애플릿과 보완적인 관계를 갖고 있다. 다음은 CGI가 실제적으로 어떻게 동작하는지에 대해 살펴보자.

브라우저에서 CGI 프로그램으로 서버를 거쳐 요구할때 데이터를 전송하는데 이때 이 데이터는 두가지 방법으로 전달되는데 첫 번째가 환경변수인 QUERY_STRING이라는 변수로 받는 방법, 또 한가지 방법이 표준입력(Standard Input)으로 받는 방법이다. 전자의 방법(METHOD)를 GET라하고 후자를 POST라고 한다. GET의 방식을 쓸 경우에는 환경변수에 할당된 메모리에 따라 데이터의 양이 제한되기 때문에 POST 방식을 많이 쓰고 있다. 나머지 한가지 방법에 HEAD가 있지만 로봇에이전트에서 이용된다.

CGI 프로그램을 이용하는 방법에 대해서 살펴 보았다. 그렇다면 GET이나 POST의 방법에 의해서 전달된 데이터, 즉 문자열의 형태는 다음과 같다.

name1=value1&name2=value2&......

전송하는 방식에 관계없이 위와 같은 문자열의 형태로 CGI 프로그램에 전달되는데 name은 변수명에 해당하고 value는 변수의 값에 해당한다. 변수와 변수 사이는 &로 구분하고 있다. 위와 같은 형태라면 공백이 들어간 문자나 한글과 같은 특수문자가 들어간 경우에는 분명 문제가 발생한다. 이런 문제가 발생하기 때문에 브라우저는 한 번의 변환과정을 거쳐서 서버에 전달한다. 그 변환과정이란 다음과 같다.

공백(Space)

"+"로 치환한다.

알파벳과 숫자 그리고 @ . * _ - 를 제외한 모든 특수문자들

%00 - %FF 사이의 값으로 해당하는 ASCII 코드값으로 변환한다.

□이홍기□는 6bytes 특수 문자이므로 다음과 같이 표현된다.

%c0%cc%c8%ab%b1%e2

이 때 CGI 프로그램은 환경변수나 표준입력(Standard Input)으로 받은 문자열을 이용하여 각각의 언어에 마련된 CGI 라이브러리를 이용하여 문자열을 분석하여 프로그램에서 필요한 데이터로 분리한 후 이용하게 된다. CGI 라이브러리에 대한 소개는 이 절의 마지막에 있다. 브라우저에서 CGI 프로그램으로 넘겨 줄 때 웹서버는 CGI에 환경변수의 형태로 여러 가지 정보를 함께 보내준다. 사용자가 사용하는 브라우저의 이름이나 전송방식(GET, POST, HEAD) 등을 환경변수로 저장시켜준다. 앞서 설명한 Tcl CGI 라이브러리는 GET, POST를 모두 지원하는 예제였고, Perl은 GET을 이용하는 예제였다.

5. 참조 (Reference)

Tcl/Tk Practical Programming

Brent Welch (DRAFT DOC.)

Graphical Applications with Tcl/Tk

Eric F. Johnson  - M&T

Teaching Yourself CGI Programming with Perl in a 21Days

Eric Herrmann - SAMS.NET

Perl 이야기

http://www.widebbs.com/Perl/

Perl institute

http://www.Perl.org/

Tcl/Tk - Sunscript tech corner

http://sunscript.sun.com/techcorner/

Tcl/Tk

http://www.cs.uoregon.edu/research/tcl/

News Group

news://comp.lang.tcl/