$string = "11";
$number = 22;
$result = $string + $number; # $result = 33
perl 中字符串和數值可以互相轉換,但是只是十進制的字符串。
對於字串中有非十進制字符的,從左邊到第一個非十進制字符的字符串將被轉換:
$result = "12a34" +1; # $result = 13
如果左邊第一個也不是十進制字符串,將轉成0:
$result = "hello" * 5; # $result = 0
所以十六進制字符"0xff",將被當做0。所以:
$a=1
$b="0x2"
if($a>$b){
print(1);
}else{
print(2);
}
打印出的是1,因為$b轉換成整數是0.
怎麼把十六進制字串轉換為對應的整數呢?用hex()函數。
$a="0xff"
hex($b)將得到整數255.
把一個字符串轉換成整數,也可以顯式進行,用int()函數。
$a = "0123"
print($a) ; #輸出0123。
print(int($a)); #輸出123。
int()函數跟自動轉換一樣,"012a3"還是會轉成12.
最好不要用自動轉換,還是顯式轉換好一些,畢竟perl讓人迷惑的地方已經夠多了。