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

作者: abliou (愚者)   2012-08-01 23:55:48
※ 引述《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
希望有回答到您的問題
作者: freeaircraft (step~by~step)   2012-08-02 11:19:00
wow~一目了然了!!!謝謝這麼清楚的解析與回應!!!

Links booklink

Contact Us: admin [ a t ] ucptt.com