2013년 9월 8일 일요일

Perl 제대로 배우기 - 3장 (Array and List Data)

3  Array and List Data

표현 예제
(1,2,3) #세 값 : 1 , 2 ,3
(“cosmos”,4.5) #두 값 : “cosmos” 와 4.5
() # 공백 리스트
두개의 마침표 :: 리스트 구성자
(1 .. 5 )  # 1 , 2 , 3 , 4, 5
(1.2 .. 5.2) # 1.2 , 2.2 , 3.2 , 4.2 , 5.2
(2 .. 6 , 10 , 12) # 2,3,4,5,6,10,12
($a .. $b) # $a 와 $b
(1.3 .. 6.1) # 1.3 , 2.3 , 3.3 , 4.3 , 5.3
@a = (“cosmoslight”,”huni”,”mirageg”,”yuni”);
quote word -> qw를 사용하여 인용부호와 쉼표를 제거함.
@a = qw ( cosmoslight, huni , mirageg ,yuni);

배열의 할당
@cosmos = (1,2,3);
@fred = @cosmos;
@cosmos = 1; # (1)와 동일
@fred = qw (one, two);
@cosmos = (4,5 ,@fred,6,7); # 4,5, “one”,”two”,6,7
($a,$b,$c) = (1,2,3); #$a = 1, $b=2, $c=3
($d,@cosmos) = ($a,$b,$c); #$d= $a , @cosmos = ($b,$c)
** 이해하
@fred = (1,2,3);
$length = @fred; #$length는 현재 @fred의 배열 길이
($a) = @fred; #배열의 첫번째 요소를 얻음.

배열 첨자
@cosmos = (7,8,9);
$b = $cosmos[0]; #첫번째요소 할당.
$cosmos[0] = 5; #첫번째요소를 7에서 5로 변경 함.

@cosmos[0,1]; #($fred[0],$fred[1])와 동일
@cosmos[0,1] = @cosmos[1,0]; # 0,1요소를 서로 교환
@cosmos[0,1,2] = @cosmos[1,1,1] ; #0부터 2번째 요소까지 모두 1번째 요소로 변경함.
@cosmos[1,2] = (9,10);

배열의 끝을 넘어서는 배열요소에 엑세스시는 undef을 리턴함.
배열의 끝을 넘어서는 배열요소에 할당을 하면 자동을 배열이 확장하고 중간요소는 undef으로 채워진다.
$#cosmos :: 마지막 배열요소의 인텍스 값을 구하기
음수 첨자는 :: 끝에서 부터 n번째를 의미 한다.

리스트 함수
push 와 pop 함수
push :: 오른쪽에 요소를 추가 한다.
예) push (@mylist,$newvalue); #@mylist = (@mylist,$newvalue)와 동일
pop :: 오르쪽의 요소를 제거하고 리턴한다.
예) $oldvalue = pop (@mylist); #@mylist의 마지막 요소를 제거 한다.

shift와 unshift 함수 (push와 pop의 왼쪽 버젼)
unshift :: 왼쪽에 요소를 추가한다.
예)unshift (@mylist,$newvalue); #@mylist = ($newvalue,@mylist)와 동일
shift :: 왼쪽에 요소를 제거한다.
예)$remove = shift(@mylist); #($remove,@mylist) = @mylist와 동일

reverse 함수 :: 원래 리스트는 그냥 두고 리스트 역순으로 변환하여 리턴한다.
sort 함수 :: 원래 리스트는 그냥 두고 ascii 상으로 정렬하여 리턴한다. (숫자에 대해서 산술적으로 정렬되지 않는다.)
chomp 함수 :: 배열요소는 모든 요소에 대해서 \n을 제거 한다.

스칼라와 리스트 구분 :: 상황에 따라 , 스칼라 <-> 리스트 변경된다.

배열로서의 <STDIN>
@a = <STDIN>;
각 행은 리스트의 개별 요소로 리턴된다. 멈추기 위해서는 Ctrl + D

배열의 변수 삽입

Perl 제대로 배우기 - 2장 (Scalar Data)

2 Scalar Data


모든 숫자는 내부적으로 동일한 포맷을 사용 :: 배정밀도 부동소수점수


지원 숫자 형식
  • 1.25
  • 7.25e4
  • -6.5e4
  • 12
  • 15
  • -2004
  • 0377 (8진수)
  • -0xff (16진수)


문자열
  • 단일 인용부호 ‘ ‘ : \n (뉴라인)은 인식되지 않는다.
    • ‘hello’  : hello (5개의 문자)
    • ‘don\’t’ : d, o, n , ‘ , t
    • ‘hello
      there’ : hello 뉴라인 there (11문자로 인식)
    • ‘’ : 널 문자열
    • ‘silly\\me’ : silly 백슬래쉬 me
    • ‘hello\n’ : hello 뒤에 백슬래쉬 , 그 뒤에 n (뉴라인으로 보지 않는다.)


  • 이중 인용부호 “ “
  • - 역 인용 부호 ` ` : 외부 명령어 실행



표기
의미
\n
뉴라인
\r
리턴
\t
\f
폼피드
\b
백스페이스
\a
\e
이스케이프
\007
임의의 8진 아스키 값
\x7f
임의의 16진 아스키 값
\cC
임의의 제어문자(여기서 Ctrl+C)
\\
백슬래쉬
\”
이중 인용부호
\l
뒤에 오는 문자는 소문자
\L
\E 전까지 뒤의 모든 문자는 소문자
\u
뒤에 오는 문자는 대문자
\U
\E 전까지 뒤의 모든 문자는 대문자
\Q
\E 전까지 모든 알파뉴메릭이 아닌 것을 이중인용부호로 둘러 쌈
\E
\L,\U,\Q의 종료


숫자를 위한 연산자
  • 2 + 3 #2더하기 3, 혹은 5
  • 5.1 - 2.4 #빼기
  • 3 * 12 # 3 곱하기 12
  • 14 / 2 # 14 나누기 2
  • 10 / 3    # 부동 소수점 나누기
  • 2 ** 3     # 2 ^3 , 2에 3승
  • 10 % 3 # 나머지 1]


문자열을 위한 연산자 ( . ) :: 반드시 명시적으로 호출 해야 함.
  • “hello” . “world” #”helloworld”와 동일]
  • $str .= “ ”; 와 $str = $str . “ “;
문자열 반복 연산자 ( x )
  • “fred” x 3 # “fredfredfred”
  • (3+2) x 4 # “5555”와 동일




숫자와 문자열 비교 연산자
비교
숫자
문자열
동일
==
eq
같지 않음
!=
ne
보다 작음
<
lt
보다 큼
>
gt
보다 적거나 같음
<=
le
보다 크거나 같음
>=
ge


연산자의 결합성과 우선순위 : 높은 것에서 낮은 것으로 (작업중)
결합성
연산자
왼쪽
리스트 연산자 (왼쪽 방향)
왼쪽
-> (메소드 호출 , 디레퍼런스)
비결합
++ , -- (자동증가, 자동감소)
오른쪽
*** (누승)
오른쪽
! , ~ , \ , + , -
논리부정,비트부정,레퍼런스 연산자 , 일원 플러스, 일원 마이너스
왼쪽
=~ , !~ (일치 ,비일치)
왼쪽
*,/,%,x (곱셈,나눗셈,나머지,문자열복사)
비결합
이름붙은 일원 연산자(예:chomp)
왼쪽
&(비트 AND)
왼쪽
|,^(비트 OR, 비트 XOR)
왼쪽
&& (논리 AND)
왼쪽
|| (논리 OR)
비결합
.. , … (비포함(noninclusive),포함 범위)
오른쪽
?:(if-then-else)
오른쪽
=,+=,-=,*=(할당과 이원 할당)
왼쪽
,=> (쉼표와 쉼표-화살표)
비결합
리스트연산자(오른쪽 방향)
오른쪽
not (논리 NOT)
왼쪽
and (논리 AND)
왼쪽
or , xor (논리 OR, 논리 XOR)


chop 함수 : 문자열의 마지막 문자를 제거
chomp 함수 : 마지막 한개의 뉴라인 문자만 제거


대소문자 변환 이스케이프 문자열 사용예제 (추후)


스칼라 값으로서 <STDIN>
$a = <STDIN>;
chomp ($a);
==========================
chomp ($a = <STDIN>);

정의되지 않은 값 (undef) :: 숫자로 사용되면 0 , 문자열로 사용되면 길이가 0인 문자열 이다.