2024-06-21
This commit is contained in:
219
Writerside/topics/Data-type.md
Normal file
219
Writerside/topics/Data-type.md
Normal file
@@ -0,0 +1,219 @@
|
||||
# 자료형
|
||||
|
||||
| 타입 | 기호 |
|
||||
| --- | --- |
|
||||
| 스칼라 | \$ |
|
||||
| 배열 | @ |
|
||||
| 해시 | % |
|
||||
|
||||
## 스칼라 (Scalar)
|
||||
|
||||
스칼라는 숫자나 문자열 같은 단순한 변수형입니다. 스칼라 타입의 변수는 `$`로 시작합니다. 변수의 주소를 담는 참조의 경우에도 스칼라 타입입니다.
|
||||
|
||||
### 숫자
|
||||
|
||||
```perl
|
||||
$num1 = -100;
|
||||
$num2 = 108.32;
|
||||
$num3 = 0xff;
|
||||
$num4 = 3.14E7;
|
||||
$num5 = 123_456_789; # 큰 숫자의 경우 3자리마다 '_'를 넣어서 읽기 쉽게 할 수 있습니다.
|
||||
```
|
||||
|
||||
#### 수학 함수
|
||||
|
||||
- abs
|
||||
- atan2
|
||||
- cos
|
||||
- exp
|
||||
- hex
|
||||
- int
|
||||
- log
|
||||
- oct
|
||||
- rand
|
||||
- sin
|
||||
- sqrt
|
||||
- srand
|
||||
|
||||
### 문자열
|
||||
|
||||
문자열은 홑따옴표('') 또는 쌍따옴표("")로 묶습니다. 쌍 따옴표로 묶인 문자열의 경우에는 문자열 내에 포함된 변수를 보간 처리(interpolation)하지만, 홑 따옴표의 경우에는 처리하지 않습니다.
|
||||
|
||||
```perl
|
||||
$name = 'charlie';
|
||||
$age = 14;
|
||||
$str1 = "\u$name is $age-year-old.\n";
|
||||
$str2 = '\u$name is $age-year-old.\n';
|
||||
|
||||
print $str1; # Charlie is 14-year-old.
|
||||
print $str2; # \u$name is $age-year-old.\n
|
||||
```
|
||||
|
||||
`q//`는 홑 따옴표처럼, 그리고 `qq//`는 쌍 따옴표처럼 작동합니다. 문자열에 따옴표가 포함된 경우에 유용합니다. `//` 대신 `()`등을 사용할 수있습니다.
|
||||
|
||||
```perl
|
||||
$str = qq/"How are you?"/;
|
||||
```
|
||||
|
||||
#### 이스케잎 문자열 (Escape sequence)
|
||||
|
||||
| 이스케잎 문자 | |
|
||||
| --- | --- |
|
||||
| `\\` | 역슬래시 |
|
||||
| `\'`, `\"` | 따옴표 |
|
||||
| `\n`, `\r`, `\t` | 줄바꿈과 탭 |
|
||||
| `\xnn` | 16진수 형식의 숫자 |
|
||||
| `\u` | 다음 문자를 대문자로 만듭니다. |
|
||||
| `\l` | 다음 문자를 소문자로 만듭니다. |
|
||||
| `\U`, `\L` | 이어지는 모든 문자를 대문자/소문자로 만듭니다. |
|
||||
| `\Q` | 이어지는 모든 문자 중 영문자/숫자가 아닌 문자를 역슬래시 처리합니다. |
|
||||
| `\E` | `\U`, `\L`, `\Q`를 끝냅니다. |
|
||||
|
||||
#### 히어독 (Here doc)
|
||||
|
||||
히어독은 문자열의 길이가 긴 경우에 유용하게 사용됩니다. 히어독은 `<<식별자`로 시작하고 `식별자`로 끝납니다.
|
||||
|
||||
```perl
|
||||
$name = 'Charlie';
|
||||
$age = 14;
|
||||
|
||||
$var = <<MYDOC;
|
||||
$name is $age-year-old.
|
||||
MYDOC
|
||||
|
||||
print $var;
|
||||
|
||||
$var = <<"MYDOC"; # 쌍따옴표로 묶은 것은 따옴표로 묶지 않은 것과 같습니다.
|
||||
$name is $age-year-old.
|
||||
MYDOC
|
||||
|
||||
print $var;
|
||||
|
||||
$var = <<'MYDOC'; # 이렇게하면 보간 처리가 되지 않습니다.
|
||||
$name is $age-year-old.
|
||||
MYDOC
|
||||
|
||||
print $var;
|
||||
```
|
||||
|
||||
#### V-문자열
|
||||
|
||||
V-문자열은 v로 시작하며, 문자 코드를 .으로 구분하여 표기합니다.
|
||||
|
||||
```perl
|
||||
$char = v9786;
|
||||
print "$char\n"; # ☺
|
||||
|
||||
$str = v102.111.111;
|
||||
print "$str\n"; # foo
|
||||
```
|
||||
|
||||
#### 특수 리터럴
|
||||
|
||||
다음 특수 리터럴은 `$`도 붙지 않으며, 문자열 보간에는 사용될 수 없습니다. 사실 변수가 아니라 함수입니다.
|
||||
|
||||
- `__FILE__`
|
||||
|
||||
현재 스크립트 파일 이름
|
||||
|
||||
- `__LINE__`
|
||||
|
||||
현재 줄 번호
|
||||
|
||||
- `__PACKAGE__`
|
||||
|
||||
현재 패키지 이름
|
||||
|
||||
|
||||
```perl
|
||||
print "Line: ".__LINE__."\n";
|
||||
```
|
||||
|
||||
#### 문자열 함수
|
||||
|
||||
- length(STRING)
|
||||
|
||||
문자열의 길이
|
||||
|
||||
- lc(STRING), lcfirst(STRING)
|
||||
|
||||
소문자로 변환
|
||||
|
||||
- uc(STRING), ucfirst(STRING)
|
||||
|
||||
대문자로 변환
|
||||
|
||||
- index(STRING, SUBSTR)
|
||||
|
||||
부분 문자열의 위치
|
||||
|
||||
- rindex(STRING, SUBSTR)
|
||||
|
||||
index()와 마찬가지로 부분 문자열의 위치를 반환합니다만, 문자열의 끝에서부터 탐색합니다.
|
||||
|
||||
- substr(STRING, OFFSET)
|
||||
|
||||
부분 문자열을 반환합니다.
|
||||
|
||||
- substr(STRING, OFFSET, LENGTH)
|
||||
|
||||
- substr(STRING, OFFSET, LENGTH, NEW_STR)
|
||||
|
||||
부분 문자열이 반환되며, 원본 문자열 중 해당 부분이 새로운 문자열로 대체됩니다.
|
||||
|
||||
- chr(NUMBER)
|
||||
|
||||
아스키 코드 또는 유니코드를 문자로 변환합니다.
|
||||
|
||||
- crypt(STRING, SALT)
|
||||
|
||||
비밀번호 등의 단방향 암호화에 사용됩니다.
|
||||
|
||||
- hex(STRING)
|
||||
|
||||
16진수 문자를 변환합니다.
|
||||
|
||||
- ord(STRING)
|
||||
|
||||
문자열의 첫 번째 문자를 숫자로 변환합니다.
|
||||
|
||||
- reverse(STRING)
|
||||
|
||||
문자열을 뒤집습니다.
|
||||
|
||||
- sprintf(FORMAT_STR, VAR)
|
||||
|
||||
C 스타일의 형식화 문자열 함수입니다.
|
||||
|
||||
- chop(STRING)
|
||||
|
||||
문자열에서 마지막 문자를 제거합니다. 매개변수가 생략된 경우에는 `$_`에 대해서 실행됩니다. 매개변수가 리스트인 경우에는 모든 아이템에 대해서 실행됩니다.
|
||||
|
||||
- chomp(STRING)
|
||||
|
||||
chop()과 비슷하지만, 문자열에서 마지막 줄바꿈 문자를 제거합니다.
|
||||
|
||||
|
||||
## 리스트
|
||||
|
||||
괄호 사이에 스칼라 값을 콤마로 구분하여 나열한 것을 리스트라고 부릅니다. 리스트를 배열 변수에 대입하면 배열이 되고, 해시 변수에 대입하면 해시가 됩니다.
|
||||
|
||||
## 배열 (Array)
|
||||
|
||||
배열은 0부터 시작되는 숫자 인덱스를 사용하는 순서화된 리스트입니다. 배열 타입의 변수는 `@`로 시작합니다. 배열의 아이템은 스칼라 타입이므로 배열의 아이템을 참조할 때에는 변수명 앞에 `$`를 사용하고, 배열의 인덱스는 `[]`로 명시합니다.
|
||||
|
||||
```perl
|
||||
@names = ('Charlie', 'Steve', 'Jane');
|
||||
|
||||
print "$names[0]\n";
|
||||
```
|
||||
|
||||
## 해시 (Hash)
|
||||
|
||||
해시는 키/값 형식의 순서없는 자료형으로 연관 배열이라고도 불립니다. 해시 타입의 변수는 `%`로 시작합니다. 해시의 아이템을 참조할 때에는 변수명 앞에 `$`를 사용하며, 데이터의 키는 `{}`를 사용해서 명시합니다.
|
||||
|
||||
```perl
|
||||
%persons = ('Charlie', 14, 'Steve', 37, 'Jane', 22);
|
||||
|
||||
print "Age is $persons{'Charlie'}\n";
|
||||
```
|
||||
Reference in New Issue
Block a user