我有一个使用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这样的面向对象的模块中没有导入函数,所以为了简单起见,我将其忽略了(另外,我没有在我的例)。 –