2010年7月30日星期五

[PerlChina] 这个算bug吗?

平时不用perl写程序,偶尔用来对付些小的串处理的需求。发现一个问题。
用下面一小段程序测试,结果显示 equal
my $c='G';
if ($c == 'a')
{
 print 'equal';
};

== 在documentation 里给的解释是 returns true if the left argument is numerically equal to the right argument.
难道 G 和 C 作为字符转化为的number 能够相等吗?

另外,如果==这个操作符只能作用于数字类型的参数,按强类型语言的理念,应该报编译错误,而作为弱类型语言,perl猜测了变量的类型?而实际无论从哪个角度理解---存储器实际存储值,或者是按某种合理的转化规则转换为的数字----二者都不能相等啊!

哪位能够给出解释?

错误要在编译时尽量暴露的目的之一,按我的理解,是使得尽量减少语义表达的不准确性造成的排错困难,而perl的设计目标却是能够尽量像用自然语言一样使用编程语言(?),我觉得这是不对的。不能仅仅为这一时的学习曲线的平缓(和自然语言有类似概念,比如复数和单数就直接对应语言中的标量和向量)就很大地牺牲了写程序和排错的效率。不理解在何种应用情况下这个特点是一种优势?

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: