본문 바로가기
창고/Backup_2013_0121

Day 1

by 가능성1g 2011. 6. 15.
반응형


Perl 의 이름의 유래 ( 일반적으로 알려진 것 )
Practical Extraction and Reporting Language
(텍스트 추출과 레포팅에 유용한 언어 )

매니아들 사이에서 붙여진 이름
Pathologically Eclectic Rubbish Lister
( 머라고 해야하는겨-_- )

하지만 사실 Perl 은 약자가 아니라
Pearl 을 4글자로 쓴것이다.
제작자 Larry Wall 시가 Perl 을 만들때,
유용한 unix 프로그램들이 몽창 다 네글자라-_- 그냥 perl 로 했다고 한다.

어쨌든 넘기고~~

Perl 의 활용처

1. 문자 처리
2. 시스템 관리
3. CGI 와 웹프로그래밍
4. DB와 상호 작용어 ( 매끄럽지 않군-_-);;

Perl 의 철학
한가지 방법만 있는것은 아니다.(머든지-_-)

Perl 문서

Perl 의 문서를 보기 위해서는
커맨드라인에서 perldoc 을 활용하면 된다.

$> perldoc perl

을 입력하면 유용한 문서들의 소개를 볼수 있다.
그중에서 좋은것들 소개~

perldoc perl  ( perl 도움말 파일 리스트 )
perldoc perlboot ( 펄 초심자 객체지향 튜토리얼 - perl beginer object orient tutorial )
perldoc CGI
perldoc -q installed ( 인스톨된 모듈을 찾는 방법에 대한 설명서 )


그리고 CPAN

http://www.cpan.org/

perl 의 엄청난 모듈 모음집 공부하면서 perl 관련 내용 찾다보면
무엇인지 자연스럽게 알게 될꺼임

첫번째 펄 플밍

#!/usr/bin/perl
use warnings;
use strict;

print "Hello World!\n"; #Comment

__END__

펄의 변수들

변수이름에 아래의 문자를 붙이면 타입선언이 되는거다.

Scalar $ dollar  ( 문자, 숫자.. )
Array @ at        ( 배열 )
Hash % percent ( 해쉬 )


strict 모드에서 ( 첫번째 펄 소스에서 use strict; 라고 쓴것 )
새변수 선언시 변수 앞에 my 를 붙여 선언후 사용해야 한다.

-.스칼라 변수 예제

my $name = "Arthur";
my $whoami = 'Just Another Perl Hacker';
my $meaning_of_life = 42;
my $number_less_than_1 = 0.000001;
my $very_large_number = 3.27e17; # 3.27 by 10 to the power of 17

-. ' 와 " 의 차이

# '는 안의 변수를 값으로 바꾸지 않는다.
my $price = ’$9.95’;

# "는 안의 변수를 값으로 바꾼다.
my $invoice_item = "24 widgets at $price each\n";

-. "을 이용하여 변수를 출력할때 유용한 방법

변수에 s 를 붙여 출력하고 싶다!!
아래에서 jumpers 라고 출력하고 싶은거임.

my $what = "jumper";
print "I have 4 $whats";

-> $whats 라는 변수는 없다 는 에러 출력-_-

my $what = "jumper";
print "I have 4 " . $what . "s";

-> 와우~ jumpers 라고 출력되는데,,,, . 이 많이들어가서 힘들다-_-

my $what = "jumper";
print "I have 4 ${what}s";

-> 깔끔이 하게 해결~

-. 배열 변수

my @fruits = ("apples", "oranges", "guavas", "passionfruit", "grapes");
my @magic_numbers = (23, 42, 69);
my @random_scalars = ("mumble", 123.45, "willy the wombat", -300);

--. 접근 방법

print $fruits[0]; # prints "apples"
print $random_scalars[2]; # prints "willy the wombat"
$fruits[0] = "pineapples"; # Changes "apples" to "pineapples"

-> c 언어 등등과 동일하게 접근하고 대체 가능
대신 타입이 없으므로 문자도 넣고 숫자도 넣고 내맘대로 할수 있음~

-. 출력 방법
@fruits[1,2,3]; # oranges, guavas, passionfruit
@fruits[3,1,2]; # passionfruit, oranges, guavas
@magic_numbers[0..2]; # 23, 42, 69
@magic_numbers[1..5] = (46, 19, 88, 12, 23); # Assigns new magic numbers

-> 개별접근(,,) 및 연속 접근(...) 가능

print "My favourite fruits are @fruits\n"; # whole array
print "Two types of fruit are @fruits[0,2]\n"; # array slice
print "My favourite fruit is $fruits[3]\n"; # single element

$fruits[-1]; # Last fruit in the array, grapes in this case.
$fruits[-3]; # Third last fruit: guavas.
-> 마이너스 값을 입력하면 뒤쪽부터 접근

-.배열 크기

my $last = $#fruits; # index of last element
my $fruit_count = @fruits; # 배열 크기
-> $last 에는 마지막 인덱스 값이 들어가고 $fruit_count 에는 크기가 들어간다.
즉 $last 는 4가 $fruit_count 에는 5가 들어간다.

-.qw 이용 배열선언
: 배열선언시 짜증나는 "와 , 의 반복을 피하기 위한 방법

my @fruits = ("apples", "oranges", "guavas", "passionfruit", "grapes");
my @fruits = qw/apples oranges guavas passionfruit grapes/;
my @months = qw(January February March April May June July August September October November December);

-. 배열출력2

my @fruits = qw/apples oranges guavas passionfruit grapes/;

print @fruits; # prints "applesorangesguavaspassionfruitgrapes"
:변수명만 쓰면 배열값이 몽창 붙어 나옴
print join("|", @fruits); # prints "apples|oranges|guavas|passionfruit|grapes"
:join 을 이용해 구분자 삽입
print "@fruits"; # prints "apples oranges guavas passionfruit grapes"
: "로 묶으면 빈칸으로 구분

-. 해쉬 선언방법
my %monthdays = ("January", 31, "February", 28, "March", 31, ...);

my %monthdays = (
"January" => 31,
"February" => 28,
"March" => 31,
...
);

-. 해쉬 값 출력 및 재 할당
print $monthdays{"January"}; # prints 31
print $monthdays{March}; # prints 31

$monthdays{"January"} = 31;
$monthdays{February} = 28;

-. 해쉬안의 값 삭제
delete($pizza_prices{medium}); # No medium pizzas anymore.

-. 해쉬 크기
my $size = keys %monthdays;
print $size; # prints "12" (assuming we include all 12 months)

특별한 전역변수

## special_variable.pl

#!/usr/bin/perl
use warnings;
use strict;

print "@ARGV";

print "\n";

print %ENV;

$> special_variable.pl arg1 arg2
:@ARGV 는 입력한 인수 값에 접근가능
:%ENV 는 실행환경값들이 담겨 있음

*. 연산자와 함수
-. 연산자
perldoc perlop 로 문서 참조 가능

( +,- 이런건 생략하고 내가 생각하기에 독특한거 위주로 보겠음여 )

$a ** $b
: 제곱승 계산

-. c와 같은 이퀄 결합 연산자 사용가능
$a += 1; # same as $a = $a + 1
$a -= 3; # same as $a = $a - 3
$a *= 42; # same as $a = $a * 42
$a /= 2; # same as $a = $a / 2
$a %= 5; # same as $a = $a % 5;
$a **= 2; # same as $a = $a ** 2;

-. 단항 연산자도 사용가능
my $a = 0;
print $a++; # prints "0", but sets $a to 1.
print ++$a; # prints "2" after it has set $a to 2.

-. 텍스트 연산자
$a .= " foo"; # same as $a = $a . " foo";
$a .= $bar; # same as $a = $a . $bar;
$a x= 3; # same as $a = $a x 3;
: x 3번 반복 해서 결합

-. 함수
perldoc perlfunc 로 문서 참조

-. 함수 인수 입력
print "Willow and Xander"; # Printing a single string.
print("Willow and Xander"); # The same.
: 프린트 함수에서 볼수 있듯이 C 같이 항상 괄호() 안에 인수를 쓸필요 는 없다.

하지만
print (3 + 7) * 4; # Wrong!
이것은 틀리고
print ((3+7) * 4); # Correct!
이게 맞다.
한마디로 쓸라믄 쓰고 안쓸라믄 "잘" 안쓰고 -_-;;

-. 일반적인 함수 인수의 타입
SCALAR -- Any scalar variable, for example: 42, "foo", or $a.
ARRAY -- A named list; usually results in the array being modified.
HASH -- Any named hash.
: 위에서 살펴봤던 기본 타입들

LIST -- Any named or unnamed list (remember that a named list is an array).
: 배열보다 상위개념인데 모르겠음-_-;;

FILEHANDLE -- A filehandle indicating a file that you’ve opened or one of the pseudo-files that is
automatically opened, such as STDIN, STDOUT, and STDERR.
: 파일핸들러

EXPR -- An expression (possibly built out of terms and operators) which evaluates to a scalar.
PATTERN -- A pattern to match on --- we’ll talk more about these later on, in Regular Expressions
: 패턴과 표현식 ( 구분이 되는건가;; )

-. 리턴값
my $age = 29.75;
my $years = int($age);

my $input = <STDIN>;
chomp($input);
: chomp 합수는 빈라인을 없애준다.

@sorted = sort @array;
:sort 함수는 배열을 정렬해서 리턴해줌

한마디로 C 와 동일함

-. 기본 함수들 소개
length()
my $string = "This is my string";
print length($string);
: 텍스트 길이 출력

lc(), uc()
print lc("Hello World!"); # prints "hello world!"
print uc("Hello World!"); # prints "HELLO WORLD!"
:대문자 소문자 변환 ( low case, upper case )

chop()
my $string = "Goodbye";
my $char = chop $string;
print $char; # "e"
print $string; # "Goodby"
:뒤에 맨끝쪽을 잘라내는 함수

chomp()
my $string1 = "let’s go dancing!";
my $string2 = "dancing, dancing!\n";
my $chomp1 = chomp $string1;
my $chomp2 = chomp $string2;
print $string1; # "let’s go dancing!";
print $string2; # "dancing, dancing!";
print $chomp1; # 0 (there was no newline to remove)
print $chomp2; # 1 (removed one newline)
: chop 과 동일한 기능이나 뉴라인(\n) 만 잘라낸다

substr()
my $string = "*** Hello world! ***\n";
print substr($string, 4, 5); # prints "Hello"
substr($string, 4, 5) = "Greetings";
print $string; # prints "*** Greetings world! ***"
substr($string, 4, 9, "Howdy");
print $string; # prints "*** Howdy world! ***"
:c의 substr 과 비슷하나 대체까지 가능~

-. 숫자함수
• abs() (absolute value)
• cos(), sin(), and atan2()
• exp() (exponentiation)
• log() (logarithms)
• rand() and srand() (random numbers)
• sqrt() (square root)

-. 타입변환
• oct()
• int()
• hex()
• chr()
• ord() # 8bit
• scalar()

-. 리스트와 배열을 다루는 함수
push(), pop()

my @random_numbers;
foreach (1..10) {
push @random_numbers, int(rand(10));
}
pop allows us to retrieve the last item from a list (removing it at the same time).
my @stack = qw(a b c d e f g);
# Pop something off the stack:
my $current = pop @stack; # @stack is now: a b c d e f
# $current is ’g’
: 누구나 알고 있는 push, pop 가능

my @array = (1 .. 5);
my $first = shift @array; # $first is ’1’, @array is 2, 3, 4, 5
unshift @array, 10; # @array is 10, 2, 3, 4, 5
:누구나 알고 있는(?) shift, unshift 가능

push, pop 은 tail 에
shift, unshift 는 head 에서 작용한다.

섞어쓰면 queue 처럼 사용이 가능한거다.

my @array = (1..5);
push @array, 6..10; # @array is 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
unshift @array, 20, 30, 40; # @array is 20, 30, 40, 1 .. 10

-. 리스트 정렬
my @list = ("a", "z", "c", "m");
my @sorted = sort @list;
my @reversed = reverse(sort @list);
: 원본(@list)은 바꾸지 않는다.

-.리스트 join, split 방법
my $record = "Fenwick:Paul:Melbourne:Australia";
my @fields = split(/:/,$record);
# @fields is now ("Fenwick","Paul","Melbourne","Australia");
my $newrecord = join("|",@fields);
# $newrecord is now "Fenwick|Paul|Melbourne|Australia";
:정규식 이용 split 가능

-. 해쉬 처리
: 해쉬 처리시에 선언에는 %를 이용하고 값을 얻을때는 $을 쓰는 것에 유의

my %friend_ages = (
        "choi" => 30,
        "moid" => 31,
        "jung" => 45 );

delete($friend_ages{choi});  # 해당 키값 삭제
print %friend_ages;
print "\n-------\n";
print exists($friend_ages{moid}); # 해당 키값이 있는지 체크 있으면 1을 return
print "\n-------\n";
print exists($friend_ages{tj});
print "\n-------\n";
print keys(%friend_ages); #키값만 리턴
print "\n-------\n";
print values(%friend_ages); #value 만 리턴
print "\n-------\n";
print each(%friend_ages); # 호출할때마다 key, value 쌍을 리턴한다
print each(%friend_ages);
print "\n-------\n";

Day 1 완료~

다음부터는 하나 Day 여도 좀 나눠서 올려야겠다=ㅁ=;;

반응형