Header

  1. View current page

    joone님의 노트

Profile_img_60x60_01
3

Perl

Perl

1987년 Larry Wall에 의해 개발됨.

광역 네트워크 구축을 위한 시스템 관리 및 제어 프로그램을 개발하던 Larry가 상사에게 그동한 한일을 보고하기 위해 만든 언어.

Pearl (Practical Extraction And Report Language)  ==> Perl

 

 

Hello World 예제

 

  1. #!/usr/bin/perl
    # hello.pl
    print "Hello World\n";

 hello.pl

Commnet

# 을 사용한다.

 

Datatype

  1. $foo # a Scalar
  2. @foo # an array
  3. %foo # a Hash table
  4. FOO  # a file handle
  5. &foo # a subroutine.

 

변수

  1. my $price = 100000;    # 지역변수  (local)
    print "$price\n";
    $price = "Very expensive.";
    print "$price\n"

 variable.pl

 

배열

  1. @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

 

  1. 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 문
  1. if ( 식 ) {
        do_something;
    }
    else{ # '식'이 거짓일 경우 블록을 실행. else는 없을 수도 있음.
        do_others;
    }

 

  1. if ( 식 ){

    1. do_something;
  2. }elsif ( 다른 식 ){     # elsif는 몇개가 들어가도 좋음.
  3.                        # 주의: elseif라고 하지 않도록 유의할 것.
    1. do_anything;        # '식'이 거짓이고 '다른 식'이 참일 때 실행.
  4. } else {
  5.     do_others;
  6. }

 

if의 반대 개념으로 unless가 있습니다. 즉, 조건식에 거짓으로 판명이 될 경우에만 블록내의 명령(들)을 실행시킵니다.

  1. @a = 3;

  2. unless ( @a == 5 ) {

  3.     print "Hey\n";

  4. }

 

  1. my @address;

  2. my $friend = 0;

  3. push  @address, "joone";

  4. push  @address, "minsoo";

  5. push  @address, "jinsu" if $friend;

  6. $friend = 1;

  7. push  @address, "john" if $friend;

  8. foreach $elem (0..$#address)

  9. {

  10.     print $address[$elem],"\n";

  11. }

 

 

for 문
  1. for ( $i = 0; $i < 100; $i++ )

  2. {

  3.         print "test ";

  4. }

 

  1. for ( 1...100)

  2. {

  3.         print "test2 ";

  4. }

 

  1. for ( 1..10, " hello ", "world ", "again\n" )
  2. { print; }

for.pl

 

  1. @myArray = (A, B, C, D, E);

  2.  

  3. for ($elem = 0; $elem <= $#myArray; $elem++ )

  4. {

  5.         print $myArray[$elem];

  6. }

  7.  
  8. foreach $elem ( 0..$#myArray )
    {
            print $myArray[$elem];
    }

foreach.pl

while, until문
  1. $i = 0;
  2. while ( $i < 100 ) {
    1. print "test";
    2. $i++;
  3. }

 

  1. $i = 0;
  2. until ( $i >= 100 ) {
    1. print "test";
    2. $i++;
  3. }

Subroutine

 

  1. sub mysubroutine

  2. {

  3.         print "this is mysubroutine\n";

  4. }

  5. &mysubroutine;

 

표준 입출력

열지 않고 사용할 수 있는 기본 핸들 사용 (STDOUT, STDIN)
  1. 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”); # 존재하는 파일에 덧붙여 쓰기 핸들
  1. print STDOUT "Enter the source file: ";

  2. $src = <STDIN>;

  3. print STDOUT "Enter the target file name: ";

  4. $target = <STDIN>;

  5. open(INPUTFILE, "<$src");

  6. $data = <INPUTFILE>;

  7. close(INPUTFILE);

  8. print $data;

  9. open(OUTPUTFILE, ">$target");

  10. print OUTPUTFILE $data;

  11. 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

 

참고문헌

History

Last edited on 06/15/2007 09:56 by joone

Comments (0)

You must log in to leave a comment. Please sign in.