*nix를 오래도록 사용해 왔더라도 perl을 얼마나 알고 있느냐 라는 질문에 정확하게 답하기가 어려울 것만 같다. 그래서 든 생각인데, 처음부터 다시 공부하는 마음으로 아주 기초적인 것부터 천천히 하나씩 기록해 보면 어떨 까? 하는 생각을 하게 되었다. 자주 update되지는 않겠지만 일단 시작했으니 끝을 보도록 하자. 글 목록이 궁금하다면 "Index"
Scalar Variable 1
변수(Variable) ?
수학에서는 변수는 수식에 따라서 변하는 값을 의미하는데, 프로그래밍 언어에서의 특정한 형태 또는 형식을 가진 데이터를 담을 수 있는 공간을 뜻한다. 이 공간에 데이터를 담을 수 있고 해당 공간의 데이터를 읽을 수 있다. 이러한 변수를 사용할 수 있도록 만드는 방법이 언어마다 존재하며 일반적으로 변수선언의 형태로 이루어진다. perl에서는 변수의 형태는 정해져 있으나 선언없이 변수를 사용하기만 해도 변수를 사용할 수 있게 된다.
Perl의 변수(Variable)
perl은 3가지 형태의 변수를 가진다.
scalar, array, hash 가 존재하며 우선 가장 기본이 되는 scalar variable을 설명하기로 한다.
Scalar Variable - Number
앞서서 변수는 특정한 형태 또는 형식을 가진 데이터를 담을 수 있는 공간이라고 이야기했다. 따라서 Scalar Variable은 Scalar Data를 담을 수 있는 공간을 말한다. c/c++ 과 같은 언어와 달리 변수의 선언 없이 사용할 수 있는 데 Scalar Variable은 가장 앞에 '$'를 표시한다.
#!/usr/bin/env perl $integer= 50;위의 코드와 같이 변수를 왼쪽에 두고 연산자 '='를 사용하면 오른쪽의 결과 값이 왼쪽 변수에 담기게 된다.
#!/usr/bin/env perl $result= (50 + hex(FF)) * oct(071) + (3 ** 2); print $result;추가로 hex()와 oct()는 괄호안의 수를 10진수가 아닌 16진수, 8진수로 인식하여 변환하여 주는 기능이 있다. 수에 대한 기본적인 연산과 변수의 사용은 이것으로 마치고 다음으로 문자열(string)의 사용해 대해서 알아보도록 하자.
Scalar Varialbe - String
perl은 string을 다루는데 있어서 다양한 편의를 제공한다. 두 string을 합치는 방법은 매우 간단하다.
#!/usr/bin/env perl $string1= "hello"; $string2= "world"; $con_string= $string1." ".$string2."\n"; print $con_string;php처럼 '.'을 사용하여 두 string을 연이어 붙일 수 있다. 또한 'x'를 사용하여 문자열을 여러번 반복할 수 있는데 다음의 예를 살펴보도록 하자.
print "three times\n" x 3;지금은 현재 소개한 연산자 만으로도 다음으로 진행하는데 무리가 없으므로 추가적인 연산자에 대해서는 필요할 때마다 하나씩 설명하도록 한다.
Scalar Data
기본적으로 perl에서 다룰 수 있는 scalar data에 대해 먼저 알아 보기로 한다.
scalar data에는 수(Number)와 문자열(String)이 존재하며 수(Number)에는 정수(Integer)와 실수(Real Number)가 있다.
정수(Interger)의 표현은 다음과 같다. 우리가 일상생활에서 아라비아 숫자를 이용하여 표현하는 것과 같이 0, 2011, -587, 255, 342342358904890345과 같이 표현이 가능하다. 다만 342342358904890345와 같이 수가 너무 커서 읽기가 힘든 경우에는 3자리씩 끊어서 표현할 수 있는데 342_342_358_904_890_345과 같이 표현할 수 있으며 동일한 수로 취급된다. ','(comma)로 표현한다면 더욱 명확한 표현이 가능하겠지만 perl에서 ,은 다른 의미로 이미 사용되고 있기 때문에 사용할 수가 없다.
정수는 다른 방법으로도 표현이 가능한데, 사람이 주로 사용하는 10진수가 아니라 2진수, 8진수, 16진수로의 표현이 가능하다. 2진수는 0b로 시작하여 0과 1로 표현되는데 예를 들면 0b1011은 2진수 1011에 해당하며 8진수는 숫자 가장 앞에 0으로 시작하면 8진수로 인식되는데 0422와 같이 표현하면 8진수 422로 인식된다. 마지막으로 16진수의 경우 0x로 시작하여 수를 표현하는 경우 16진수로 인식되며 0xff와 같은 표현이 가능하다. 또한 기존 10진수로의 표현에서는 수가 큰 경우 3자리 씩 끊어서 표현할 수 있다고 하였는데, 명확히 이야기하면 3자리가 넘어가는 수는 모두 '_'를 이용하여 끊어서 표현이 가능한데 2진수, 8진수, 16진수의 경우 4자리씩 끊어서 표현이 가능하다.
실수(Real Number)의 경우는 두가지의 표현법이 가능한데 일반적으로 사용되는 부동소수점(Floating-point)을 이용한 방식으로 3.1415, 1024.0 과 같은 표현이 있을 수 있다. 여기서 1024는 정수로 1024.0는 실수로 처리 된다는 사실을 기억하자. 또 다른 표현 방법으로는 지수 표현 방식(exponential notation)인데, 수를 하나 보여주고 그에 따른 설명을 덧붙임으로써 설명하겠다. 12.24356e20과 같은 표현이다. 이 표현 방식은 다음과 같이 풀이 될 수 있다. 12.24356x10^45[2]
문자열(string)은 낱글자의 순열들을 이루는 말으로 hello와 같은 경우를 말한다. 문자열은 어떠한 낱글자와의 조합도 가능하다. 또한 가장 짧은 문자열으로는 아무런 문자가 없는 문자열이 가능하다. 문자열은 '(single-quotation)을 이용한 표현 방법이 있으며 "(double-quotation)을 이용한 표현방법이 있다. 예를 들면, 'hello world'와 "hello world"와 같은 표현이 가능하다. 또한 '(single-quotation)을 이용하는 것과 같은 방법으로 q|hello world|와 "(double-quoatation)을 이용하는 것과 같은 방법은 qq|hello world|와 같은 표현이 가능하며 앞의 두가지 표현 방법을 이용하는 경우 '|'을 대신하여 '{', '<', '(', '['이 가능하며 물론 반드시 반대쪽 닫는 문자는 '}', '>', ')', ']'을 사용해야한다.
'(single-quotation)을 사용하여 문자열을 표현하는 것과 '(double-quotation)을 사용하여 문자열 표현할때의 차이점이 있는데 가장 큰 차이는 \(backslash)를 이용한 backslash escape의 가능 유무이다. backslash escape는 문자열에서 표현할 수 없는 표현할 수 없는 문자를 표현하는 방법을 말하는데 예를 들면 new-line(line feed)의 경우 '\n'으로 표현되는데 '(single-quotation)을 이용한 문자열에 '\n'이 표현되어 있으면 그대로 화면에 출력되지만, "(double-quotation)을 이용한 문자열에 '\n'이 표현되어 있으면 new-line의 의미로 사용된다. 따라서 앞서서 본 "hello world" program에서 print를 이용하여 화면에 출력할 때
print '\n'; 과
print "\n"; 은
다르게 표현된다.
backslash escape에 해당하는 문자들에 대해서는 추후에 따로 설명하기로 한다.
[1] 위 표현에서의 ^는 승수를 이야기하는 것으로 10의 45승을 표현하고 있다. perl에서는 위 표현을 처리하는 연산자로 **을 제공한다.
Hello world
지난 글에서 perlbrew를 설치하고 사용하는 방법을 간단히 이해했으므로, 언제나 그렇듯이 모든 프로그래밍 언어의 시작은 "Hello world"[1]를 만들어 보도록 하자.!
perl은 기본적으로 code를 파일로 저장하지 않아도 shell에서 짧은 코드를 바로 실행할 수도 있다.
$] perl -e 'print "Hello wolrd\n";print는 화면에 문자열을 출력할 수 있다. '\n'에 대한 것은 c/c++/java 어느 언어라도 알고 있다면 이해했으라 생각한다. perl은 c/c++/java와 유사하게 코드의 각 라인은 반드시 ';'으로 끝나야한다. 따라서 위와 같이 코드를 실행하게 되면 "Hello world"가 실행되는 것을 확인할 수 있다.
파일로 코드를 저장해서 실행시키는 방법을 이용해보도록 하자.
print "Hello wolrd\n";으로 code를 저장한다. 여기서는 hello.pl으로 저장하였다. 이렇게 저장한 파일을 가지고 실행하는 방법은 다음과 같다.
$] perl hello.pl
좀 더 나은 방법으로는 hello.pl 자체가 실행가능한 program이 되는 것인데, 그것은 shell progrmming 에서 상단에 사용할 shell을 표시해주는 것과 마찬가지로 perl을 알려줌으로 써 해결할 수 있다.
#!/usr/bin/perl print "Hello wolrd\n";와 같이 code를 저장한다. 여기서도 hello.pl으로 저장하였다. 그런다음 이 파일에 실행 권한을 부여하면 실행 가능한다.
$] chmod u+x hello.pl $] ./hello.pl위 와 같은 방법으로 hello world를 만들고 실행해보았다. 다만 우리는 perlbrew를 통해서 다양한 version의 perl을 사용할 것이기 때문에 위와 같은 방법으로 coding하면 우리가 원하는 version의 perl을 사용할 수가 없다. 따라서 아래와 같은 방법으로 file 상단에 perl을 표시해 주어야 한다.
#!/usr/bin/env perl
[1] Hello world라는 program은 Dennis MacAlistair Ritchie에 의해서 시작된 것으로 화면에 "Hello world"라는 문자열을 출력해 봄으로써 해당 언어의 기본을 이해하는데 목적이 있다.