Perl
Perl
1987년 Larry Wall에 의해 개발됨.
광역 네트워크 구축을 위한 시스템 관리 및 제어 프로그램을 개발하던 Larry가 상사에게 그동한 한일을 보고하기 위해 만든 언어.
Pearl (Practical Extraction And Report Language) ==> Perl
Hello World 예제
- #!/usr/bin/perl
# hello.pl
print "Hello World\n";
hello.pl
Commnet
# 을 사용한다.
Datatype
- $foo # a Scalar
- @foo # an array
- %foo # a Hash table
- FOO # a file handle
- &foo # a subroutine.
변수
- my $price = 100000; # 지역변수 (local)
print "$price\n";
$price = "Very expensive.";
print "$price\n"
variable.pl
배열
- @arr = ( 1, 2, 3, "Last member" );
$size = @arr;
print "array size = $size\n";
$myarray[0] = 1;
$myarray[1] = 2;
$myarray[2] = "test";
$myarray[3] = 4;
print $myarray[0], "\n";
print "$myarray[1]\n";
print $myarray[2], "\n";
print $myarray[3];
array.pl
- my @address;
my $friend = 0;
push @address, "joone";
push @address, "minsoo";
push @address, "jinsu" if $friend;
$friend = 1;
push @address, "john" if $friend;
foreach $elem (0..$#address)
{
print $address[$elem],"\n";
}
array2.pl
관계연산자(relational operator)
>, <, >=, >= # 숫자의 비교. if ( $a > $b ) { print "O.K."; }
==, !=, <=> # <=>는 앞의 변수가 작으면 -1, 크면 1, 앞과 뒤의 변수가 같으면 0을 return합니다.
제어문
if 문
- if ( 식 ) {
do_something;
}
else{ # '식'이 거짓일 경우 블록을 실행. else는 없을 수도 있음.
do_others;
}
- if ( 식 ){
- do_something;
- }elsif ( 다른 식 ){ # elsif는 몇개가 들어가도 좋음.
- # 주의: elseif라고 하지 않도록 유의할 것.
- do_anything; # '식'이 거짓이고 '다른 식'이 참일 때 실행.
- } else {
- do_others;
- }
if의 반대 개념으로 unless가 있습니다. 즉, 조건식에 거짓으로 판명이 될 경우에만 블록내의 명령(들)을 실행시킵니다.
-
@a = 3;
-
unless ( @a == 5 ) {
-
print "Hey\n";
-
}
-
my @address;
-
my $friend = 0;
-
push @address, "joone";
-
push @address, "minsoo";
-
push @address, "jinsu" if $friend;
-
$friend = 1;
-
push @address, "john" if $friend;
-
foreach $elem (0..$#address)
-
{
-
print $address[$elem],"\n";
-
}
for 문
-
for ( $i = 0; $i < 100; $i++ )
-
{
-
print "test ";
-
}
-
for ( 1...100)
-
{
-
print "test2 ";
-
}
- for ( 1..10, " hello ", "world ", "again\n" )
- { print; }
for.pl
-
@myArray = (A, B, C, D, E);
-
-
for ($elem = 0; $elem <= $#myArray; $elem++ )
-
{
-
print $myArray[$elem];
-
}
- foreach $elem ( 0..$#myArray )
{
print $myArray[$elem];
}
foreach.pl
while, until문
- $i = 0;
- while ( $i < 100 ) {
- print "test";
- $i++;
- }
- $i = 0;
- until ( $i >= 100 ) {
- print "test";
- $i++;
- }
Subroutine
-
sub mysubroutine
-
{
-
print "this is mysubroutine\n";
-
}
-
&mysubroutine;
표준 입출력
열지 않고 사용할 수 있는 기본 핸들 사용 (STDOUT, STDIN)
- print STDOUT "Enter your name?: ";
$name = <STDIN>;
print STDOUT "Your name is $name\n";
input.pl
<>는 지정된 핸들로 부터 한줄을 입력받는 연산임.
파일 읽고/쓰기
| 구분 | 내용 |
| 읽기 핸들 | open(HANDLE_NAME,“ filename”); # 지정된 파일의 읽기 핸들 open(HANDLE_NAME,“ <filename”); # 위와 같음 (더 명확한 표현) |
| 쓰기 핸들 | open(HANDLE_NAME,“ >filename”); # 지정된 파일 생성, 쓰기 핸들 open(HANDLE_NAME,“ >>filename”); # 존재하는 파일에 덧붙여 쓰기 핸들 |
-
print STDOUT "Enter the source file: ";
-
$src = <STDIN>;
-
print STDOUT "Enter the target file name: ";
-
$target = <STDIN>;
-
open(INPUTFILE, "<$src");
-
$data = <INPUTFILE>;
-
close(INPUTFILE);
-
print $data;
-
open(OUTPUTFILE, ">$target");
-
print OUTPUTFILE $data;
-
close(OUTPUTFILE);
copyfile.pl
펄모듈 동적으로 로드하기
require 를 이용한 방법
require는 라이브러리가 될 파일의 내용을 그 위치에다가 직접써넣는 C에서의 include 문과 같다고 보면됨.
코드를 로드하기보다는 삽입
## 삽입을 피해갈수 있다
if ( 0 ){
require "cgi_lib.pl";
}
## 포함할 스크립트의 이름을 동적으로 지정
$file = "cgi_lib.pl"
require $file;
use 를 이용한 방법
use는 require와 다른 특성을 갖는데,
첫째, 중복로딩을 막습니다.
둘째, 로직흐름과 상관없이 새로운 영역에 로딩됩니다.
컴파일시에 문맥을 따지지않고 발견되는 use문을 단한번만 처리하게 된다.
Debugging
perl -d aaa.pl
참고문헌
- Perl 이야기, http://www.perl.or.kr/perlyagi/
- Perl로 시작하는 본격 스크립트 프로그래밍, 마이크로소프트웨어 2002년 6월
History
Last edited on 06/15/2007 09:56 by joone
Comments (0)