본문 바로가기

Script/Perl

(23)
15. Regular Expression 1 - 기본 http://gypark.pe.kr/wiki/Perl/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D 정규 표현식 / / 사이에 문자열을 넣으면 정규표현식이 된다. http://regexr.com/ 에서 쉽게 정규 표현식에 대한 테스트를 수행할 수 있다. 메타문자 정규 표현식(정규식, regular expression)에서 메타 문자(meta character)들은 특별한 뜻이 담기어 문자열 양식을 나타내는 데에 쓰인다. 앞으로 살펴볼 수량자, 앵커, 역참조 모두 메타문자중 일부이며 각 메타문자는 우선순위가 있다. 문자 집합과 축약 문자 집합 축약표현 [0-9] 모든 숫자 \d [A-Za-z0-9] 단어를 구성하는 문자 \w [\f\t\m\r] 모든 공백 문자 \s [\..
14. Class 펄은 원래 객체 지향 언어가 아니였다. 펄의 객체 지향 기능은 중간에 이식된 것이며 아래와 같은 특징이 있다. - 객체는 단순한 참조이다. 다만 어떤 클래스에 속하는지 알 수 있다는 점이 일반 참조와 구별되는 점이다. - bless 를 사용하면 참조하고 있는 객체가 어떤 클래스에 속할지 정할 수 있다. - ref 를 사용하면 참조하고 있는 것이 어떤 클래스인지 알아낼 수 있다. - 객체의 메서드는 $obj->method(); 식으로 호출한다. - 클래스 메서드는 Package::Name->method() 식이다. - 클래스는 메서드를 포함하게 된 패키지이다. Constructor and destrutor - 생성자의 첫번째 인자는 객체가 아니고 클래스 이름이다. - 생성자의 두번째 인자는 객체 그 자체가..
13. Sub Routine Declare sub hyphenate { my $word = shift @_ ; # 배열의 첫째 원소를 추출하고 나머지는 무시한다 $word = join "-", map { substr $word, $_ , 1 } ( 0 .. (length $word ) - 1); return $word ; } - 서브루틴은 sub 예약어로 선언한다. - 전달된 인자는 내장배열변수 @_ 로 접근할 수 있다. - 사용자 정의 서브루틴은 항상 스칼라 리스트 (내장배열변수 @_ ) 를 입력으로 받는다. 입력으로 받는 리스트는 물론 원소가 하나만일 수도 있고 아예 없을 수도 있다. 배열이나 단일 스칼라 데이터는 내부에 저장되어 있는 1배의 리스트로 받는다. 하나의 해시 데이터는 2배 크기의 리스트로 받는다. - 괄호는 옵션이..
12. Reference Reference 참조는 포인터다. 포인터에 접근하기 위해서는 ${ } 에 포인터로 사용된 변수를 넣으면 된다. 주소를 저장하기 위해서는 역슬래시 \ 를 이용하여 저장한다. 모호한 점이 없다면 접근시 {} 를 생략할 수 있다. my $colour = "Indigo"; my $scalarRef = \ $colour ; print $colour ; # "Indigo" print $scalarRef ; # 주소값이 SCALAR(..) 으로 출력 print ${ $scalarRef } ; # "Indigo" print $$scalarRef ; # 모호한 점이 없다면 중괄호 생략 가능 아래는 배열에 대한 참조인데 결국 포인터라서 -> 를 이용하여 원소에 접근가능하다. my @colours = ( "Red", "O..
11. Context 영어를 쓰다보면 같은 단어라도 문맥에 따라 다르게 해석한다. 펄의 가장 독특한 특징은 코드가 언어처럼 문맥에 영향을 받는다는 점이다. 모든 펄 표현식은 결과로 스칼라를 생성할지 리스트를 생성할지에 따라 스칼라 문맥 또는 리스트 문맥 중 하나에서 평가된다. 또한 많은 펄 표현식과 내장함수(built-in-functions) 가 평가되는 문맥에 따라 아주 다르게 동작한다. 이를 표현식의 문맥 (the context of the expression) 이라고 한다. 표현식이라 함은 함수, if, while 같은 제어구조 단순 대입등 값을 변수에 넣는 모든 행위를 말한다. 예를 들어 sort 표현식은 스칼라 문맥에서는 아무것도 리턴할게 없기에 스칼라 변수에 대입하려 하면 undef 를 반환한다. Scalar Co..
10. conditional sentence if .. elsif .. else ... elsif 철자가 특별한 거 외엔 별다를 게 없다. my $word = "antidisestablishmentarianism" ; my $strlen = length $word ; if($strlen >= 15 ) { print "'", $word , "' is a very long word"; } elsif( 10 = 20; unless .. else ... 보통 잘 사용하지 않지만 짧은 구문을 쓸 때는 유용하다. my $temperature = 16; print "Oh no it's too cold" unless $temperature > 15; 삼항 연산자 c 와 동일하다 my $gain = 48; print "You gained ". $gain , " "..
09. string length 문자열의 길이를 변수로 반환한다. my $word = "abcdefghijklmnopqrstuvwxyz" ; my $stringLength = length $word ; substr 문자열을 추출하거나 치환한다. my $greeting = "Welcome to perl!\n"; print substr($greeting, 0, 7 )."\n"; #Welcome => 0부터 7개 읽음 printf substr($greeting, 7)."\n" ; #Welcome => 0부터 7개 읽음 print substr($greeting, - 6, 4 )."\n"; #perl => -6번 인덱스에서 4 개 읽음 print substr($greeting, 5, 9 )."\n"; #me to per => 5 번..
08. List Data 리스트는 변수가 아니다. 리스트는 배열이나 해시 변수에 대입되기 위해 잠깐 생성되는 데이터 값이다. 그래서 배열을 선언하는 구문과 해시를 선언하는 구문이 같은 것이다. "리스트"와 "배열"이라는 단어를 서로 바꿔서 써도 상관없는 경우는 많다. 하지만 그런 경우만큼 또 미묘하게 다르고 완전히 헷갈리게 동작하는 경우도 많다. 자 어쨌든, =>는 ,의 다른 형태일 뿐이라는 점을 기억하면 된다. 이 리스트는 빈 배열을 선언할 때에도 빈 해시를 선언할 때에도 사용할 수 있으며 perl 인터프리터가 어느 쪽인지 알 수 있는 방법은 없다. 이런 특이한 측면을 이해한다면, 리스트는 중첩할 수 없다고 할 수밖에 없는 이유도 이해할 수 있을 것이다. 다음을 시도해 보면: my @array = ( "apples", "ban..