【发布时间】:2015-01-22 19:59:46
【问题描述】:
在编写以下代码时,我试图将子程序从一个控制器文件调用到另一个控制器文件:
Abc.pm 这是我需要将子程序调用到另一个控制器文件的代码的文件。我需要调用以下子程序。
package MyApp::Controller::Abc;
use Moose;
use IO::File;
use Data::Dumper;
use MyApp::MyConfig;
use MyApp::DateUtils;
use MyApp::Arrs::API;
use MyApp::Constants;
use namespace::autoclean;
sub get_token_id :Private
{
my $self = shift;
my $c = $self->context;
my $myDBI = $c->model('MyDBI')->new;
return $myDBI->get_token_id;
}
上面的代码我需要调用到 Def.pm 文件。现在我打电话如下:
package MyApp::Controller::Def;
use Moose;
use namespace::autoclean;
use MyApp::Utils;
BEGIN { extends 'Catalyst::Controller'; }
my($self, $c) = @_;
my ($State, $Zip, $Country) = @_;
my $tokenid = $self->get_token_id;
我收到以下错误: 无法在未定义的值上调用方法“get_token_id”
但我只需要如下调用:
当我使用以下代码时:
package MyApp::Controller::Def;
use Moose;
use namespace::autoclean;
use MyApp::Utils;
BEGIN { extends 'Catalyst::Controller'; }
my $self = shift;
my $c = $self->context;
my ($State, $Zip, $Country) = @_;
my $coid = $self->get_token_id;
我收到此错误: 无法在未定义的值上调用方法“上下文”
任何人都可以帮助我为什么会收到此错误。
提前谢谢...
【问题讨论】:
-
您需要
use MyApp::Controller::Def;某处吗?我无法找出$c的实例,因此倾向于假设您的代码中缺少某些内容。 -
@_包含子/方法的参数。加载模块时您正在访问它。为什么?!毫不奇怪,它是空的,因此您将undef分配给$self。 -
更具体地说:以
my开头的四行看起来像是属于一个方法(在Perl 中是一种特殊的sub)。您根本没有在sub中使用它们。你在哪里找到他们?毫无疑问,您会注意到它们位于sub中。