異なる perl モジュール間で変数を共有したいと考えています。そこで、変数 (私の場合はハッシュ変数) を保存する MyCache.pm という perl モジュールを作成しました。
package PerlModules::MyCache;
my %cache = ();
sub set {
my ($key, $value) = @_;
$cache{$key} = $value;
}
sub get {
my ($key) = @_;
return $cache{$key};
}
これで、2 つのハンドラーができました。1 つのハンドラーは set メソッドを呼び出し、もう 1 つのハンドラーは 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;
}
そして、ここにゲッターハンドラーがあります:
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;
}
これで、これらの perl モジュールにアクセスするように (http.conf を介して) Apache を構成しました。セッターハンドラーを実行してからゲッターを実行しましたが、出力はありませんでした。
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 メソッドの 3 つの呼び出しです。それで、私は何を間違っていますか?問題を修正し、異なるハンドラー間でキャッシュ変数を共有するにはどうすればよいですか?