我想在不同的 perl 模块之间共享一个变量。所以我创建了一个名为 MyCache.pm 的 perl 模块,它保存了变量(在我的例子中是一个哈希变量):
package PerlModules::MyCache;
my %cache = ();
sub set {
my ($key, $value) = @_;
$cache{$key} = $value;
}
sub get {
my ($key) = @_;
return $cache{$key};
}
现在我有两个处理程序。一个处理程序将调用 set 方法,另一个将调用 get 方法来访问信息。
package PerlModules::MyCacheSetter;
use Apache2::RequestRec();
use Apache2::RequestIO();
use Apache2::Const -compile => qw(OK);
use PerlModules::MyCache;
sub handler {
my $r = shift;
PerlModules::MyCache::set('test1', "true");
PerlModules::MyCache::set('test2', "false");
PerlModules::MyCache::set('test3', "true");
return Apache2::Const::OK;
}
这是 getter 处理程序:
package PerlModules::MyCacheGetter;
use Apache2::RequestRec();
use Apache2::RequestIO();
use Apache2::Const -compile => qw(OK);
use PerlModules::MyCache;
sub handler {
my $r = shift;
$r->print(PerlModules::MyCache::get('test1'));
$r->print(PerlModules::MyCache::get('test2'));
$r->print(PerlModules::MyCache::get('test3'));
return Apache2::Const::OK;
}
现在我已经配置了 apache(通过 http.conf)来访问这些 perl 模块。我运行 setter 处理程序,然后运行 getter,但没有输出。
在 error.log 中现在有一些条目:
Use of uninitialized value in subroutine entry at ../MyCacheGetter.pm line 14.
Use of uninitialized value in subroutine entry at ../MyCacheGetter.pm line 15.
Use of uninitialized value in subroutine entry at ../MyCacheGetter.pm line 16.
这一行是 get 方法的三个调用。那么我做错了什么?如何解决问题并在不同的处理程序之间共享我的缓存变量?