Rainie999 发表于 2017-5-17 08:53:36

Perl 常见错误

最近在用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. packagemodule;
   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]
查看完整版本: Perl 常见错误