私はCGI :: Session :: Drive :: memcachedを使用するperlスクリプトを持っていますが、システム上で利用可能であれば、デフォルトのセッションドライバまたは別のドライバにフォールバックすることができます。利用可能なモジュールに基づいてモジュールをどのように動的に組み込むのですか?
これは...私はMemcacheのを使用して始まったが、キャッシュ:: Memecachedおよび/またはCGI ::セッション::ドライバ:: memcachedは利用できない場合、このdoesntのは必ずしも例の問題を解決する方法である
package MySession;
use Moose::Role;
use Moose::Util::TypeConstraints;
use namespace::autoclean;
use CGI::Session ('-ip_match');
use CGI::Session::Driver::memcached;
use Cache::Memcached::Fast;
#would be nice to create this conditionally, or use a delegate maybe
has 'memeCached' => (
is => 'rw',
isa => 'Maybe[Cache::Memcached::Fast]',
default => sub{ return Cache::Memcached::Fast->new({'servers' => [ '10.x.x.x.:10001' ],'compress_threshold' => '100000','nowait' => 1,'utf8' => 1}) },
);
sub buildSession{
my($this,$cgi,$sessionDir) = @_;
$cgi = $cgi || $this->getCGI();
my $sid = $this->SID();
my $mem = $this->memeCached();
my $sss;
if(!$mem){
$sss = CGI::Session->load(undef, $cgi, {Directory=>$sessionDir}) or die CGI::Session->errstr();
}else{
$sss = CGI::Session->load("driver:memcached", $cgi, { Memcached => $mem }) or die CGI::Session->errstr();
}
...
それから、これが私の考えを得ました。私はこれをどのように一般的な意味でやっていますか?これを行う最善の方法は何ですか(特にMooseを使用する)?
'use Foo :: Bar;'は実際には 'BEGIN {require Foo :: Bar; import Foo :: Bar; } '。しかし、通常は条件付きでインポートすることは有用ではないので、 'import 'と呼ぶのではなく、おそらく良い考えです。 – ikegami
あなたはmod_perlを使用していますか?これはなぜ私たちが価値を否定して再宣言するのかを説明するかもしれない。 anecdotalの例の+1 +1 – qodeninja
@ikegami Perldocで[使用](http://perldoc.perl.org/functions/use.html)を見ると、インポートが含まれています。しかし、 'Net :: LDAP'や' CGI :: Session :: Driver :: memcached'のようなオブジェクト指向のモジュールには関数のインポートがありませんので、単純化のために残しました(プラス、私は例)。 –