最近在用perl+mdbm+spread做东西。
php是用了很久了,python和ruby与用过,经典脚本语言就perl没摸过,现在在像小学生一样抱着教科书啃。
发现perl果然有难度多了。别的东西没让我这么频繁地犯错误。
1.第一个常见的错误是:向文件输出内容。标准语法是:
1. print STDERR "this is an apple.";
我一般都会写成
1. print STDERR,"this is an apple.";
总是多打一个逗号。老实说,一般我很少重复地犯错误,但是这个地方我就是记不住。
2.第二个常见错误是:经常漏写Hash引用的箭头。
本来应该写成
1. print $hash->{$key};
我常常写成
1. print $hash{$key};
3.第三个常见错误是:字符串比较:
用php时间长了,老是用两个等号来比较字符串。这是错的。正确写法是
1. if($var eq "hello") {
2. print "world";
3. }
我经常写成:
1. if($var=="hello") {
2. print "world";
3. }
这会导致逻辑错误,很难觉查。
4.第四个常见错误:
if语句不带括号(都是php带坏的)
正确的写法是:
1. if($var)
2. {
3. print "yes";
4. }
我经常写成
1. if($var)
2. print "yes";
5.还有一个错误,不是从php中带过来的,一般人估计不会犯:漏写分号。
常见错误之七:
在面向对象的编程中,错误地调用类内部函数。
以代码作为例子:
err.pl文件:
1. #! /usr/bin/perl -I./ -w
2. use module;
3. my $var=module->new();
4. print "call1:\n";
5. $var->call();
6. print "call2:\n";
7. $var->call2();
8. print "\ncall3:\n";
9. $var->call3();
下面是module.pm:
1. package module;
2.
3. sub new {
4. my $self={};
5. bless $self;
6. return $self;
7. }
8. sub call {
9. my ($self)=@_;
10. $self->_call("something as an Argument");
11. }
12. sub call2 {
13. my ($self)=@_;
14. _call($self,"something as an Argument");
15. }
16. sub call3 {
17. my ($self)=@_;
18. _call("something as an Argument");
19. }
20. sub _call {
21. my ($self,$arg) = @_;
22. if($arg)
23. {
24. print "yes ,We got an argument!\n";
25. }
26. print "self:".$self."\n";
27. }
28. 1;
现在我们运行err.pl:
1. renlu@localhost$ chmod +x err.pl
2. renlu@localhost$ ./err.pl
输出的结果是:
1. call1:
2. yes ,We got an argument!
3. self:module=HASH(0x1f85e88)
4. call2:
5. yes ,We got an argument!
6. self:module=HASH(0x1f85e88)
7.
8. call3:
9. self:something as an Argument
第一第二个执行结果一样,第三个不一样?这也很容易让程序出错。我今天下午调了一下午 最后发现是这个原因。特地记录一下。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com