Language/Perl

[Perl] Scalar 변수 "연산자"

VIR&US 2023. 11. 19. 03:45
반응형

스칼라에 대입된 값이 "숫자"인지 "문자열"인지 확인하는 것은 불가능합니다.

  • 정확하게 말하면 그럴 필요가 없어야 합니다.
  • 사용하는 연산자에 따라 스칼라를 숫자로 취급할지 또는 문자열로 취급할지가 결정됩니다.
  • 문자열 연산자를 사용하면 문자열처럼 동작하고 숫자 연산자를 사용하면 숫자로 동작합니다.
  • 값의 유형이 달라 동작이 불가능하면 경고가 발생합니다.

숫자로 취급하여 비교하는 연산자

  • <
  • >
  • <=
  • >=
  • ==
  • !=
  • <=>
  • +
  • *

문자열로 취급하여 비교하는 연산자

  • lt
  • gt
  • le
  • ge
  • eq
  • ne
  • cmp
  • .
  • x

Example

#!/bin/perl

 

use strict;

use warnings;

 

my $str1 = "4G";

my $str2 = "4H";

 

print $str1 .  $str2;

print "\n";

print $str1 +  $str2;

print "\n";

print $str1 eq $str2;

print "\n";

print $str1 == $str2;

print "\n";

print "yes" == "no";

print "\n";

Result

4G4H
Argument "4H" isn't numeric in addition (+) at weak line 11.
Argument "4G" isn't numeric in addition (+) at weak line 11.
8

1
Argument "no" isn't numeric in numeric eq (==) at weak line 17.
Argument "yes" isn't numeric in numeric eq (==) at weak line 17.
1

Interpretation

  • print $str1 . $str2; # "4G4H"
  • print $str1 + $str2; # "8" 경고가 2개 발생
  • print $str1 eq $str2; # "" (빈 문자열. 즉 false)
  • print $str1 == $str2; # "1"(즉 Ture), 숫자, 4==4
  • print "yes" == "no"; # "1" (즉 Ture), 경고가 2개 발생, 숫자로 사용되었기에 두 개 모두 0이 된다
728x90
반응형