检查提供给子程序的参数以使用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中编写严格代码”的好教程或手册,请留下链接。
谢谢。
答案 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)