2024-06-21

This commit is contained in:
2024-06-21 14:57:07 +09:00
parent 04caa2eb53
commit e00dd1bfbf
43 changed files with 2689 additions and 0 deletions

View 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";
```