※ 引述《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
希望有回答到您的问题