我的Perl App
中有以下结构sub new {
my $self = {};
$self->{'orcl'} = undef;
$self->{'cgi'} = CGI->new();
bless $self;
return $self;
}
sub getJ {
my $self = shift;
my $requestmethod = $self->{'cgi'}->request_method;
$self->{'orcl'} = dbconnect();
if($requestmethod eq 'POST') {
my $testvar = anotherSub();
}
sub anotherSub {
my $self = shift;
my $sth = $self->{'orcl'}->functionToFetchRow();
}
在sub" dbconnect"打开与数据库的连接。 所以现在我的问题是,我得到了错误"无法调用方法" functionToFetchRow()""
如果我这样做
$self->{'orcl'} = dbconnect();
在sub" anotherSub"它完美无缺。但我想只打开一次与数据库的连接,而不是在我需要它的每个Sub中打开。
所以我的错在这里?
答案 0 :(得分:1)
无法调用方法" functionToFetchRow"在未定义的值
此错误消息告诉您$self
为undef
。
您需要将$self
传递给anotherSub
,否则它无法了解相关信息。为此,请使用方法语法。
if($requestmethod eq 'POST') {
my $testvar = $self->anotherSub();
}
Perl将自动传递$self
作为anotherSub
的第一个参数,如果它被调用的话。这就是在Perl中oject方向的工作原理。
当您执行$self->{'cgi'}->request_method
和$self->{'orcl'}->functionToFetchRow()
时,您已经使用了完全相同的内容。在这两种情况下,$self
(实际上只是一个哈希引用)中的键包含对象,->method
在这些对象上调用方法,将对象本身作为第一个参数传递。< / p>