编写代码以编译严格的最佳方法

时间:2010-07-23 11:04:44

标签: perl cgi

检查提供给子程序的参数以使用strict编译的最佳方法是什么(我的解决方案有效,但有更好的方法吗?)

我有一个很大的旧库,我想更正代码,所以我可以添加use strict;对它来说,我的大部分错误都是这样的(在页面加载时会产生189个错误):

Use of uninitialized value in string eq at ../lib/cgilibtest.pl line 1510
Use of uninitialized value in concatenation (.) or string at ../lib/cgilibtest.pl line 1511.

它们是由这样写的子程序生成的:

#!/usr/bin/perl -w
sub example()
{
    my $var1 = shift @_;
    my $var2 = shift @_;
    my $var3 = shift @_;
    if($var2 eq ""){var2 = "something";} # this line generates the first type of error beacause $var2 is not defined
    return "var1 = ".$var1.", var2 = ".$var2.", var3 = ".$var3; # this line generates the second type of error, beacause $var3 is not defined
}
print "Content-type: text/html\n\n";
$someVar = &example("firstVar");
print $someVar;

我的解决方案是使用三元运算符并将其写为:

#!/usr/bin/perl -w
use strict;

sub example()
{
    my $var1 = ($_[0])?$_[0]:"";
    my $var2 = ($_[1])?$_[1]:"something";
    my $var3 = ($_[2])?$_[2]:"";
    return "var1 = ".$var1.", var2 = ".$var2.", var3 = ".$var3;
}
print "Content-type: text/html\n\n";
my $someVar = &example("firstVar");
print $someVar;
PHP中的

我使用function example ($var1, $var2 = null, $var3 = null){...}

P.S。如果有人知道关于“在perl中编写严格代码”的好教程或手册,请留下链接。

谢谢。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

sub example {
  my $var1 = shift || '';
  my $var2 = shift || 'something';
  my $var3 = shift || '';

  return "var1 = ".$var1.", var2 = ".$var2.", var3 = ".$var3;
}

答案 2 :(得分:1)