我有一個使用CGI :: Session :: Drive :: memcached的perl腳本,但是我希望能夠在默認會話驅動程序或其他驅動程序上備份,如果它在系統上可用的話...如何根據可用模塊動態地包含模塊?
這是我開始時使用內存緩存,但這並不一定能解決的情況下的問題,當緩存:: Memecached和/或CGI ::會議::驅動程序:: memcached的不可...
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嗎?這也許可以解釋爲什麼重新宣佈我們沒有核武器的價值。 +1的軼事例如 – qodeninja
@ikegami的確,如果你的Perldoc看[使用](http://perldoc.perl.org/functions/use.html),它包括進口。但是,在Net :: LDAP和CGI :: Session :: Driver :: memcached這樣的面向對象的模塊中沒有導入函數,所以爲了簡單起見,我將其忽略了(另外,我沒有在我的例)。 –