Re: [問題] 對於書上範例的疑問

看板Perl作者 (把青春freeze)時間12年前 (2012/08/01 23:55), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《freeaircraft (step~by~step)》之銘言: : 各位版大好~ : 小弟剛開始接觸Perl,對於書裡看到的一個範例有看沒有懂, : 所以想請版大們幫忙解惑一下,範例如下: : 範例1 : @fred = qw(hello dolly); : $y = 2; : $x = "這是 $fred[$y-1] 的家"; : print "$x\n"; # 印出"這是 dolly 的家" : 範例2 : @fred = qw(hello dolly) : $y = "2*4"; # $y包含字串 "2*4" : $z = "這是 $fred[$y-1] 的家"; : print "$z\n"; #印出"這是 dolly 的家" : 書上說,"2*4"被當成數值時只等於2! : 但我有看沒有懂,所以想請問為什麼字串"2*4"被當成數值時是等於2!? : 懇請善心的板大幫忙解惑一下... 語境問題(context) perl有自動轉換變數成為符合後面運算子的型態 這邊範例2的$y一開始是定義為字串 但是這邊要印的時候 $y後面是接"減號" 碰到這問題時 perl就會自動將$y按照內容轉換為數值(純量語境) 轉換的方式(關鍵) 就是將字串從頭開始,開始辨識"屬於數值的內容" 直到出現"非屬於數字的元素出現" 這邊的例子是"2*4" 所以就會轉換成為2 因為*號不屬於數值 所以如果以以下的例子來看 (虛擬代碼) $a = '123' ; $a-100 ; => 23 $a = '90a' ; $a-100 ; => -10 $a = 'a123' ; $a-100 ; => -100 (因為從頭開始辨認 第一個不是數值 此時$a就是0) $a = '123.1' ; $a-100 ; => 23.1 $a = '-123a' ; $a -100 ; => -223 希望有回答到您的問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 42.72.133.145 ※ 編輯: abliou 來自: 42.72.133.145 (08/01 23:57)

08/02 11:19, , 1F
wow~一目了然了!!!謝謝這麼清楚的解析與回應!!!
08/02 11:19, 1F
文章代碼(AID): #1G6L67Lg (Perl)
文章代碼(AID): #1G6L67Lg (Perl)