设为首页 收藏本站
查看: 962|回复: 0

[经验分享] Perl 常见错误

[复制链接]

尚未签到

发表于 2017-5-17 08:53:36 | 显示全部楼层 |阅读模式
最近在用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

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378331-1-1.html 上篇帖子: freeswitch与perl 语言相关 下篇帖子: perl定义函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表