my $now = &GetDate;
my $myHeader = &ReadMessage;
my $mySoftwareVersions = param('mySoftwareVersions');
my $q = new CGI;print $q->header();
use CGI::Carp(fatalsToBrowser);
getAllSoftwareVersions();
sub getAllSoftwareVersions
{
my $user = "zxxx";
my $passwd = "xxxx";
# my $tableName = "config_table";
# my $connection = DBI->connect("DBI:mysql:MESCI:hamysql02.stl.mo.boeing.com:18080", $user, $passwd, { AutoCommit => 0, RaiseError => 1}) or die "Couldn't connect to Database: " . DBI->errstr;
print "Must be connected\n\n";
print "\n\n";
# Error here.
my @Rows = &getConfigTableRows($connection, $config_table, $mySoftwareVersions );
my $total = @Rows;
print "total is ";
print $total;
以上代码死于:
Global symbol "$connection" requires explicit package name
修改 这个问题与:
有关希望原始海报能够清理它,这样更有意义,但这是我们迄今为止所做的,所以我们可以尝试提供帮助。
答案 0 :(得分:3)
虽然肯特的回答在考虑,但错误只是告诉你,你没有声明 $connection
作为词法(“我的”)变量。因此,perl将其解释为您必须引用包全局。
当您使用未定义的变量时,Raw Perl不会抱怨,它认为它是一个全局包。您似乎在某处(标准和推荐的练习)有strict
,这要求您在使用之前声明变量。如果你没有在当前包(或“namespace”)中声明变量,它会假定你引用了另一个包中声明的变量,所以它会要求你附加包名,只是为了保持一切清晰和高于一切。
Perl使用my
来声明作用域变量,使用our
来声明包全局变量。
my $connection = "Rainbow";
OR
our $connection = 'French';
<小时/> 万一你有错误的想法,如果你严格关闭,错误信息将消失,你的问题不会。他们可能会进入地下。
{ no strict;
my @rows = getConfigTableRows( $nothing, @other_stuff );
}
Perl不会抱怨 $nothing
什么都不是。这个易于修复的错误可能会导致其他地方出现更微妙的错误。另外,如果您已成功分配$connection
,则只需键入:
{ no strict;
my @rows = getConfigTableRows( $connecion, $config_table, $mySoftwareVersions );
}
Perl给你一个关于'$connecion'
的消息,希望你可以告诉它这是一个错字,并且放弃至少30分钟没有看到它并想知道你的查询是否错误,或者其他什么。
答案 1 :(得分:1)
好吧,如果这是其他问题的相关内容,
这是错误的原因是因为您已注释掉创建连接变量的行。
如果没有定义数据库连接,您将如何查询数据库中的表行?
答案 2 :(得分:1)
回复:
my $now = &GetDate;
my $myHeader = &ReadMessage;
如果您打算使用&amp;在函数调用中,请确保使用括号:
my $now = &GetDate();
my $myHeader = &ReadMessage();
否则,当前正在执行的子参数可供您调用的子程序(并可由其替换)。
这意味着如果你在mod_perl下使用你的cgi脚本,突然你实际上在做
my $now = &GetDate( Apache2::RequestUtil->request );
如果GetDate采用可选参数,这可能是非常错误的。