< programing perl >一书中2.3.2.1小结,说到对待0x 0
十六进制和八进制的解释好像有若干问题,谨慎怀疑之,讨论下是不是我自己没理解正确。

the leading 0x for hex and 0 for octal work only for literals.The automatic
conversion of a string to a number does not recognize these prefixes - you
must do an explicit
conversion[9] with the oct function (which works for hex-looking data, too,
as it happens).

于是,我试验了下面小小程序试验:

$a = 010;
print $a;
的确和书上说的一样 可以识别 输出 8

【问题1】
$a = “010”;
$a += 1;
print $a;
的确和书上说的一样 不能自动转换 输出 11, 说明在$a += 1;的时候,把$a转换成了int 10;
但是如果把 $a += 1;换成$a++;则输出 011。*从而发现 ++  和 +=1 并非完全等效!
这种行为方式是不是太难以理解了?背后是怎么实现的?*


*$a = “010”;*
*$a = oct $a;*
$a += 1;
print $a;
的确和书上说的一样 oct *可以work  输出 9*

但是
【问题2】
*$a = 010;
$a = oct $a;*
$a += 1;
print $a;
*却输出 1!*也就是说在第二行,$a 为 0,但是按照perl的上下文具体决定变量是string还是数字的思想,$a 虽然没有赋值“”, 但是在oct
的上下文中应该是当成string来使用的啊,也就是说应该和$a = “010”;效果一样,但是却输出诡异的1!
实在难以理解!同样的道理对十六进制也有同样的问题。

请教各位,这是我理解错了吗?


谢谢!











-- 
和你在一起

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“PerlChina Mongers 讨论组”论坛。
 要在此论坛发帖,请发电子邮件到 [email protected]
 要退订此论坛,请发邮件至 [email protected]
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

回复