스칼라 변수
Perl에는 스칼라, 스칼라 배열, 스칼라 연상 배열이라는 3가지의 기본적인 데이터형이 있습니다.
그중에서도 스칼라 데이터란 숫자나 문자열과 같은 단순한 데이터를 말합니다.
그리고 프로그래밍에 필수 요소인 변수라는 개념이 있습니다. 변수란 여러 가지 값을 일시적으로 기억해두기 위한 [저장소]입니다.
Perl에서는 각 데이터형에 대응하는 형태로 각각의 스칼라 변수, 배열, 연상 배열 3개의 변수가 존재하고, 스칼라 변수는 그중에서도 가장 기본이 되는 변수로 숫자나 문자열을 저장할 수 있습니다.
스칼라 변수의 이름은, $(달러) + 영문자로 시작하며 그 이후는 숫자 영문자 그리고 언더바(_)를 사용할 수 있습니다.
그리고 대문자 소문자를 구별합니다. $a 와 $A는 별개로 취급합니다.
변수명에 사용가능한 문자 | |
$abc123 | 변수명으로 사용 가능 |
$123abc | 숫자로 시작하므로 사용 불가 |
$abc_123 | 언더바(_) 사용 가능 |
$abc-123 | 마이너스(-)는 사용 불가 |
숫자와 문자열
스칼라 변수에는 숫자나 문자열을 대입할 수 있습니다.
예를 들어 $x = 1;이라고 하면 $x라는 변수에 숫자 1을 대입 한 것입니다.
예 | 의미 |
$x = 1; | $x에 1을 대입 |
$y = -10; | $y에 -10을 대입 |
$z = 3.1415; | $z에 3.1415를 대입 |
$a = ‘hello’; | $a에 hello를 대입 |
$b = “홍길동”; | $b에 홍길동을 대입 |
코드예 – 1
$str = '사과';
print "이것은 $str입니다.";
> 이것은 사과입니다.
1행에서 $str이라는 변수에 [사과]라는 문자열을 대입하고
2행에서 $str 변수가 [사과]라는 문자열로 표시되었습니다.
스칼라 변수의 사용 시에 주의점이 있습니다.
변수 바로 뒤에 숫자나 영문자가 겹치는 경우입니다.
코드 예 -2
$tall = 170;
print "저의 키는 $tallcm 입니다.";
> 저의 키는 입니다.
변수 $tall과 단위 cm 문자열이 겹치면서 Perl이 변수를 $tallcm라고 잘못 해석해버린 예입니다.
이런한 경우에는 연결 연산자를 사용해서 분할해서 적는 방법이 있습니다.
코드 예 -3
$tall = 170;
print "저의 키는 ". $tall . "cm 입니다.";
> 저의 키는 170cm 입니다.
위에 방법이 조금 귀찮을 경우에는 다른 방법으로도 적을 수 있습니다.
코드 예 -4
$tall = 170;
print "저의 키는 ${tall}cm 입니다.";
> 저의 키는 170cm 입니다.
그리고 스칼라 변수를 취급할 때에는 문자열 대입하는 곳에서도 알 수 있듯이, Perl에서는 문자열을 취급하기 위해 반드시 싱글 쿼터(‘) 또는 더블 쿼터(“)로 감싸줘야 합니다.
싱글 쿼터로 감싼 문자열을 싱글 쿼터 문자열, 더블 쿼터로 감싼 문자열을 더블 쿼터 문자열이라고 합니다.
싱글 쿼터 문자열 또는 더블 쿼터 문자열을 다루는 경우에도 주의점이 있습니다.
1. 에스케이프
싱글 쿼터 안에서 싱글 쿼터 문자열을 사용하는 경우 또는 더블 쿼터 안에서 더블 쿼터 문자열을 사용하는 경우에는 에스케이프 기호(\)로 에스케이프를 하지 않으면 안 됩니다.
구문 예 | 내용 |
$room = ‘Perl’s Room’; | 싱글 쿼터 안에서 그대로 싱글 쿼터문자는 사용 불가. |
$room = ‘Perl\’s Room’; | 싱글 쿼터 문자를 에스케이프하는 것으로사용 가능. |
$room = “Perl’s Room”; | 더블 쿼터 안에서 싱글 쿼터문자는 그대로 사용 가능. |
$talk = “I said “Wow”.”; | 더블 쿼터 안에서 그대로 더블 쿼터 문자는 사용 불가. |
$talk = “I said \”Wow\”.”; | 더블 쿼터 문자를 에스케이프하는 것으로사용 가능. |
$talk = ‘I said “Wow”.’; | 싱글 쿼터 안에서 더블 쿼터 문자는 그대로 사용 가능. |
2. 변수 출력
변수를 출력하는 경우 더브 쿼터 안에서는 변수 출력이 가능합니다.
하지만 싱글 쿼터 앞에서는 변수 출력이 불가능합니다.
$name = "Perl";
print "my name is $name \n";
print 'my name is $name \n';
> my name is Perl
> my name is $name \n
2-3. 스칼라 연산자
Perl에서는 다음과 같은 연산자를 사용할 수 있습니다.
1. 산술 연산자
구문열 | 명칭 | 내용 |
$x + $y | 더하기 | $x 와 $y 의 값을 더함 |
$x – $y | 빼기 | $x 에서 $y 의 값을 뺌 |
$x * $y | 곱하기 | $x 와 $y 를 곱함 |
$x / $y | 나누기 | $x 를 $y 로 나눔 |
코드 예 (더하기)
$n = 1;
$m = 2;
print $n + $m ;
> 3
2. 문자열 연산자
문자열은 연결해주거나 반복해서 실행해주는 연산자입니다.
코드 예 (연결)
$a = "ABC";
$b = "DEF";
print $a . $b ;
> ABCDEF
코드 예 (반복)
$a = "ABC";
$n = 3;
print $a x $n ;
> ABCABCABC
연결, 반복 연산자는 숫자에서도 동일하게 적용됩니다.
코드 예 (연결)
$a = 123;
$b = 456;
print $a . $b ;
> 123456
코드 예 (반복)
$a = 123;
$n = 3;
print $a x $n ;
> 123123123
3. 대입 연산자
스칼라 변수에 값을 대입합니다. 대입 연산자 =는 비교하다는 의미로 해석하시면 안 됩니다.
코드 예 (대입)
$a = 1;
$b = $a + 2;
print $b;
> 3
문자열도 똑같이 = 를 사용합니다.
코드 예(대입)
$a = "Perl";
$b = "WEB";
$c = "$a $b";
print "$c";
> Perl WEB
4. 이항 대입 연산자
대입 연산자로 $a = $a + 2; 와 같은 양쪽에 같은 변수를 사용할 경우, 보다 간편하게 기술할 수 있는 연산자입니다.
식 | 이항 대입 연산자 |
$a = $a + $b | $a += $b |
$a = $a – $b | $a -= $b |
$a = $a * $b | $a *= $b |
$a = $a / $b | $a /= $b |
$a = $a . $b | $a .= $b |
$a = $a x $b | $a x= $b |
코드 예
$a = 1;
$a += 2; # $a = $a + 2; 와 같음
print $a;
> 3
5. 자동 증가 연산자와 자동 감소 연산자
이항 대입 연산자를 보다 간편하게 한 것으로 변수에 1을 증감하는 것이 특징인 연산자입니다.
구문열 | 명칭 | 의미 |
++$a | 자동 증가 | $a에 1을 더함 |
$a++ | ||
–$a | 자동 감소 | $a에서 1을 뺌 |
$a– |
코드예
$a = 1;
$a++;
print $a;
> 2
여기에서 조심해야 할 것은 ++$a와 $a++는 의미가 다릅니다.
연사자를 변수 앞에 두는 경우에는 우선 변수의 값이 변경되고 나서 변경된 변수의 값을 사용합니다.
연산자를 변수 뒤에 두는 경우에는 우선 변수의 값을 사용하고 나서 변수의 값을 변경합니다.
코드 예
$a = 1;
print ++$a . "\n"; # $a에 1을 더하고 출력함
$b = 2;
print $b++ . "\n"; # $b를 출력하고 1을 더함
print $b; # 5행에서 변경된 값을 출력
> 2
> 2
> 3
6. 비교 연산자
2개의 스칼라 값을(숫자 또는 문자열)을 비교할 때 판단하기 위한 연산자입니다.
의미 | 숫자 | 문자열 | 내용 |
보다 작다 | $a < $b | $a lt $b | $a 가 $b 보다 작으면 [참] |
보다 크다 | $a > $b | $a gt $b | $a 가 $b 보다 크면 [참] |
작거나 같다 | $a <= $b | $a le $b | $a 가 $b 보다 작거나 같으면 [참] |
크거나 같다 | $a >= $b | $a ge $b | $a 가 $b 보다 크거나 같으면 [참] |
같다 | $a == $b | $a eq $b | $a 와 $b 가 같으면 [참] |
같지 않다 | $a != $b | $a ne $b | $a 와 $b 가 같지 않으면 [참] |
코드 예
$age = 21;
if ($age > => 20){
print "성인";
} else {
print "미성년";
}
> 성인
댓글