【发布时间】:2012-06-15 00:20:59
【问题描述】:
我正在研究 Request Tracker,它是用 perl 编写并使用 Mason 用于网络界面。我正在尝试制作一个自定义页面,其中涉及一个自动处理程序、一个 html 页面,并在其他组合中引入了一些方法。我有一个简单的类,我想用它来跟踪我的部分界面所需的一些东西。现在一切 轨道是一个数据库句柄。
package RTx::FooBar::Web;
use strict;
use warnings;
use RTx::FooBar::Handle;
sub new
{
my $proto = shift;
$RT::Logger->debug("creating new");
my $class = ref($proto) || $proto;
my $self = {};
bless( $self, $class);
my $handle = RTx::FooBar::Handle->new();
$handle->Connect();
$self->{cfHandle} = $handle;
return $self;
}
sub DESTROY {
my $self = shift;
$RT::Logger->debug("destroy");
delete $self->{cfHandle};
}
sub CFHandle
{
my $self = shift;
return $self->{cfHandle};
}
1;
我尝试将其粘贴到会话中,以便可以在需要的任何地方使用它 它在网络界面中。所以我尝试在一个网页中使用它 - 自动处理程序会:
% $m->call_next;
<%INIT>
$RT::Logger->debug("my autohandler");
use RTx::FooBar::Web;
$session{cfWeb} ||= RTx::FooBar::Web->new();
</%INIT>
现在困扰我的事情(除了它不是 工作)是“新”方法中的日志打印一次,但是 登录 DESTROY 方法会打印 56 次。而每一次, 在 RTx::FooBar::Handle->DESTROY 中的调试也会打印出来,表明 $self->{cfHandle} 没有被移除。任何人都可以建议为什么这可能是 发生?是不是因为 session 是绑定哈希?
*更新*我不再使用 $session,它在创建一次后仍然破坏了我的句柄 56 次。
【问题讨论】: