同样道理啊。 $a=16; oct '16' == 8+6 == 14 2009/9/2 yi wang <[email protected]>
> 谢谢,打开warning看到了, > 但是还有个问题,*同样的道理*, > use warnings; > *$a = 0x10;* > $a = oct $a; > $a += 1; > print $a; > 是不是也应该报告同样的错误啊?*但是却输出量诡异的15!*甚至奇怪啊! > > > > 2009/9/2 杨溪 <[email protected]> > > 【问题2】 >> *$a = 010; # 相当于$a=8 >> $a = oct $a; # **相当于**$a=oct '8',当然返回1了, 建议测试代码时打开warning* >> $a += 1; >> print $a; >> >> 2009/9/2 yi wang <[email protected]> >> >> < 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 访问该论坛 -~----------~----~----~----~------~----~------~--~---
