날짜: 1996-04-05 | 글쓴이: 도아 | 12729 번 | 프린트 | 메일로보내기

제 5강 - 스칼라 변수


펄에서 가장 기본적인 변수가 스칼라 변수이다. 스칼라 변수는 문자열과 숫자 둘다를 취할 수 있으며, 문자열과 숫자가 완전히 상호 교환적이라는 것이 두드러진 특징이다. 예를들어

$priority = 9;		# 정수
$real = 43.955;		# 실수
$hex = 0xFF00;		# 16진수. hex($hex)로 10진수로 변환
$octal = 0177;		# 8진수. oct($octal)로 10진수로 변환
print "$priority, $real, $hex, $octal\n"; # 출력은 모두 10진로 된다.

은 스칼라 변수 $priority에 9를 할당하지만 정확히 동일한 변수에 문자열 또한 할당할 수 있다:

$priority = 'high';
print "$priority\n";

펄은 또한 문자열로서 숫자를 허용한다:

$priority = '9';
$default = '0009';
print $priority + $default, "\n";
print $priority . $default, "\n";

위의 문장은 문자열 이지만 대수연산과 다른 연산도 가능하다.

일반적으로 변수명은 숫자, 문자, 밑줄로 구성되지만 숫자로 시작해서는 않된다. 또한 변수 $_는 뒤에서 보면 알겠지만 특수변수이다. 또한 펄은 대소문자를 구분한다. 따라서 $a와 $A는 서로다른 변수이다. 연산자와 할당

펄은 모든 통상적인 C의 대수 연산자를 사용한다:

$a = 1 + 2;	# 1과 2를 더해 $a에 저장
$b = 3 - 4;	# 3에서 4를 빼고 $a에 저장
$c = 5 * 6;	# 5와 6을 곱함
$d = 7 / 8;	# 7을 8로 나눔
$e = 9 ** 10;	# 9의 10승
$f = 5 % 2;	# 5를 2로 나눈 나머지
$g = ++$a;	# $a를 증가시키고 결과를 리턴
$h = $a++;	# $a를 리턴시키고 $a를 증가
$i = --$a;	# $a를 감소키기고 결과를 리턴
$j = $a--;	# $a를 리턴하고 $a를 감소
print "$a, $b, $c, $d, $e, $f, $g, $h, $i, $j\n";

문자열의 경우 펄은 다음과 같은 연산자를 지원한다:

print $b . $c, "\n";	# $b에 $c를 덧붙임
print $b x $c, "\n";	# $b를 $c번 반복

값을 할당히기위해 펄은 다음과 같은 것을 지원한다:

$a = $b;	# $a에 $b를 할당
$a += $b;	# $b를 $a에 더하고 결과를 $a에 저장
$a -= $b;	# $b를 $a에서 빼고 결과를 $a에 저장
$a .= $b;	# $b를 $a에 덧붙이고 결과를 $a에 저장

주의: 펄이 $a = $b로 값을 할당할 때 $b의 사본을 만들고 이 것을 $a에 할당한다. 따라서 $b는 따로 변경할 때까지 $a와 같은 값을 갖게된다. 다른 연산자는 명령행에서 man perlop라고 입력해서 참조한다. 끼워넣기

다음 코드는 사과와 배를 출력하기위해 문자열 덧붙임을 사용 한다:

$a = '사과';
$b = '배';
print $a.'와 '.$b;

마지막 print 문장에서 단지 하나의 문자열만 포함하는게 보다 나은 방법이지만

print '$a 와 $b';

는 아주 쓸모 없는 $a 와 $b를 출력한다. 이 경우 작은 따옴표 대신에 큰 따옴표를 사용하면 된다:

print "$a 와 $b";

큰따옴표는 변수 해석을 포함해서 임의의 코드에대한 변수대치를 수행한다. 이 것은 원래의 문장보다 훨씬 나아보인다. 큰따옴표에는 개행문자, 탭과 같은 특수문자를 포함할 수 있다. 코드 \n는 개행문자이며, \t는 탭이다. 인용

펄에서는 문자열을 인용하는 여러가지 방법이 존재한다. + '(작은 따옴표)

가장 간단한 인용법. 작은 따옴표 내에 위치한 문장은 문자적으로 해석되며, 어떠한 변수 대치나 확장도 취해지지 않는다. 문자열내에 작은 따옴표를 포함하기 위해서는 역 슬래쉬 ''로 Escape시켜야 한다.

$instrument = '북'; 
$littleInstrument = '소고 $instrument'; 
# $littleInstrument의 문자값은 "소고 $instrument"라는 문자열을 
# 출력한다. 
+ "(큰 따옴표)

큰 따옴표는 따옴표 사이의 변수를 "값으로 대치"시킨다.

$instrument = "북"; 
$littleInstrument = "소고 $instrument"; 
# $littleInstrument의 값은 "소고 북"이다.

문자열내에 큰 따옴표를 포함하기 위해서는 역 슬래쉬 ''로 Escape시켜야 한다.

+ `(역 따옴표)

역 따옴표는 UNIX 쉘에서와 마찬가지로 동작한다. 역 따옴표내의 문장은 분리된 프로세스로 수행되며, 명령의 표준 출력이 문자열을 값으로 리턴된다. 역 따옴표는 변수 대치 또한 수행하며, 문자열에 역 따옴표를 포함하기위해 역 슬래쉬 ''로 escape 시켜야 한다.

$memberList = "/usr/people/conductor/roster"; 
$memberCount = `wc -l $memberList`; 
# $memberCount는 roster내의 회원의 수가된다.
# 각의 회원은 행으로 구분된 것으로 가정하였다. 

 1: # sendmail의 위치
 2: $sendmail = "/usr/lib/sendmail"; 
 3:         
 4: # http가 설치된 디렉토리
 5: $basedir = '/www'; 
 6:
 7: # 기록파일 
 8: $logfile = "$basedir/etc/logs/$progname.log"; 
 9:         
10: # 오늘 날자 
11: $date = `date`; 
+ q/ /

할당하려는 문자열에 인용문자(',",`)의 출현빈도가 높아 반복적으로 역슬래쉬(\)를 사용해야 하는 경우에 아주 유용한 인용연산자이다.

$string = 'This isn't Bill's shirt, I'm sure.';
$qstring = q/This isn't Bill's shirt, I'm sure./;
print "$string\n $qstring\n":

이 경우 슬래쉬(/) 대신에 수직바(|)나 둥근괄호(())를 사용할 수도 있다.

$qstring1 = q|This isn't Bill's shirt, I'm sure.|;
$qstring2 = q(This isn't Bill's shirt, I'm sure.);
print "$qstring1\n $qstring2\n":
스칼라 변수 관련함수 chop(STRINGVAR)

문자열 변수의 마지막 문자를 제거하고 지워진 문자를 리턴한다.

print "나이: ";
chop($age = <STDIN>);
print "\n나이는 $age군. 어리네\n";
chomp(STRINGVAR)

문자열의 끝에서 라인 끝까지를 제거하며, 지워진 문자의 개수를 리턴한다. 근본적으로 chop와 같은 일을 한다. 그러나 줄바꿈은 DOS의 경우 0x0D0A이지만 Unix의 경우에는 0x0A이다. 따라서 줄바꿈 문자를 제거하기위해 chop를 사용하면 Unix에서는 제데로 동작하지만 DOS에서는 제대로 동작하지 않는다. 이 chomp 함수는 OS 때른 줄바꿈 문자의 개수를 인식할 수 있으므로 줄바꿈 문자를 정확히 제거할 수 있다.

주의 chomp는 perl 5에서 지원하는 기능이다. 따라서 perl 4에서는 사용할 수 없다. lc(STRING)

주어진 문자열을 소문자로 변환한다. lcfirst(STRING)

주어진 문자열의 첫 문자를 소문자로 변환한다. uc(STRING)

주어진 문자열을 대문자로 변환한다. ucfirst(STRING)

주어진 문자열의 첫 문자를 대문자로 변환한다. length(STRING)

주어진 문자열의 길이를 리턴한다.

$name = 'Jae-Geun, Kim';
$sex = 'Male';
print lc($name) . "----" . uc($name) . "\n";
print lcfirst($sex). "----" . uc($sex) . "\n";
print "Name: " . length($name) . "\n";
hex(STRING)

16진수 문자열을 10진수로 변환한다. oct(STRING)

8진수 문자열을 10진수로 변환한다. 연습 - 방명록

이제부터 웹상에서 가장 흔히 볼수 있는 CGI 프로그램인 방명록을 작성하도록 하자. 방명록은 사용자의 입력을 받아 데이터 파일에 기록하는 가장 간단한 CGI 프로그램이다. 이 방명록 CGI는 기본적으로 다음과 같은 세가지 파일로 구성된다. guest.html

guest.html은 방문자의 입력을 받아들이기위한 폼 문서로서 다음과 같이 구성된다.

이름, 전자우편, 홈페이지는 <INPUT> 태그의 TYPE을 TEXT로 한 것이다. 전자우편과 홈페이지는 VALUE 속성을 주어 기본값을 출력하도록 했으며 의견은 <TEXTAREA> 태그를 사용했다. 보내기와 지우기는 <INPUT> 태그의 TYPE를 SUBMIT과 RESET로 만든 것이다.

<FORM>의 ACTION 속성은 앞으로 작성할 guest.cgi로 해야 한다.

이 폼문서는 사용자의 입력을 받아들이는 문서이므로 파일의 권한은 644이어야 한다.

% chmod 644 guestform.html
guestbook.html

방문자가 입력한 내용을 저장하는 방명록 데이타 파일이다. 이 파일은 다음과 같은 형태로 작성한다.

1: <html>
2: <head>
3: <title>방명록</title>
4: <meta http-equiv="pragma" content="no-cache">
5: <meta http-equiv="content-type" content="text/html;charset=EUC-KR">
6: </head>
7: <body>
8: <h1>방명록</h1>

사용자가 입력한 데이터는 방명록 파일의 뒷부분에 추가되므로 HTML의 종료태그인 </body></html>을 쓰지 안도록 한다.

일반적으로 웹서버는 nobody 권한으로 기동되며, 웹서버가 만든 자식 프로세서인 CGI도 nobody 권한을 갖게된다. 이 nobody 권한을 갖는 CGI가 파일에 데이터를 쓰기위해서 파일의 권한은 반드시 666이어야 한다. 따라서 이 파일을 작성한 후 Unix 명령행에서 다음과 같이 입력한다.

% chmod 666 guestbook.html
guest.cgi

guest.html으로부터 입력을 받아 guestbook.html에 입력을 저장하는 CGI이다. CGI 프로그램은 실행 파일(웹과 Unix 명령행에서)이므로 파일의 권한은 755를 이야야 한다. 따라서 이 파일을 작성한 후, Unix 명령행에서 다음과 같이 입력한다.

% chmod 755 guestdata.html
guest.cgi 작성
  1. guest.html은 웹에서는 URL을 이용해서 참조하며, CGI가 읽고 쓸때에는 Unix 시스템 경로를 사용한다. 두 개의 스칼라 변수, $guestreal, $guesturl에 guestbook.html 파일의 시스템 경로와 URL을 할당한다.
  2. <FORM> 태그의 ACTION은 guest.cgi를 참조하므로 $cgiurl이라는 변수에는 guest.cgi의 URL을 할당한다.
  3. 사용자가 폼 문서의 보내기 버튼을 클릭하면 화면에 "방명록을 작성해 주셔서 감사합니다"라는 메시지가 출력되도록 guest.cgi를 작성한다.

작성한 guest.cgi를 Unix 명령행에서 수행하면 다음과 같은 형식의 출력을 만들 것이다.

 1: % guest.cgi
 2: content-type: text/html

 3: <html>
 4: <head>
 5: <title>방명록</title>
 6: </head>
 7: <body>
 8: <p>
 9: 방명록을 작성해 주셔서 감사합니다.
10: </body>
11: </html>


다음글: 제 6강 - 리스트 (7668)1996-04-06
이전글: 제 4강 - 변수 (5794)1996-04-04

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.