Re: [Cgi-session-user] CGI::Session::Serialize::yaml (PATCH)
Brought to you by:
sherzodr
From: Mark S. <ma...@su...> - 2006-02-16 14:24:36
|
On Thu, Feb 16, 2006 at 08:57:52AM -0500, Mark Stosberg wrote: > Tyler, > > Attached is a patch which refactors yaml.pm so that YAML.pm is not > loaded by default. It's been lightly tested. Actually, my hot-shot-programmer-lightly-tests-things method didn't work out so hot for me. Attached is an actually-tested revision that actually works. I believe it may only run the eval("") once in a persistent environment. I've just starting using it on a project now! Here's a before and after snapshot of session rows. Before: $D = {_SESSION_ID => '31e899cf2d95a020bdc911ea78916ccc',_SESSION_ATIME => 1139236810,_SESSION_REMOTE_ADDR => '12.161.105.185', _SESSION_CTIME => 1139236810}; After: a_session | --- BrowseMode: category_list _SESSION_ATIME: 1140099124 _SESSION_CTIME: 1140099099 _SESSION_EXPIRE_LIST: {} _SESSION_ID: 2dd493f484b6cb71d590546b2b6f673c _SESSION_REMOTE_ADDR: 12.161.105.182 current_view: month It's a lot easier to look at. Mark > > Mark > --- yaml.pm.orig 2006-02-15 16:35:51.000000000 -0500 > +++ yaml.pm 2006-02-16 08:54:42.087956056 -0500 > @@ -2,32 +2,37 @@ > > use strict; > use CGI::Session::ErrorHandler; > -use YAML (); > > -our $SYCK = eval "use YAML::Syck (); 1;"; > - > -$CGI::Session::Serialize::yaml::VERSION = '1.0'; > +$CGI::Session::Serialize::yaml::VERSION = '1.1'; > @CGI::Session::Serialize::yaml::ISA = ( "CGI::Session::ErrorHandler" ); > > +# If neither are already loaded, try loading either one. > +our $YAML = _load('YAML::Syck') > + || _load('YAML') > + || die "No YAML module found. Install YAML::Syck or YAML: $@ "; > +import $YAML qw/Load Dump/; > + > sub freeze { > my ($self, $data) = @_; > - if($SYCK) { > - return YAML::Syck::Dump($data); > - } else { > - return YAML::Dump($data); > - } > + return Dump($data); > } > > > sub thaw { > my ($self, $string) = @_; > - if($SYCK) { > - return (YAML::Syck::Load($string))[0]; > - } else { > - return (YAML::Load($string))[0]; > - } > + return (Load($string))[0]; > } > > +sub _load { > + my $module_name = shift; > + eval { > + local $SIG{__DIE__}; > + require $module_name; > + }; > + return $@ ? undef : $module_name; > +} > + > + > 1; > > __END__; -- . . . . . . . . . . . . . . . . . . . . . . . . . . . Mark Stosberg Principal Developer ma...@su... Summersault, LLC 765-939-9301 ext 202 database driven websites . . . . . http://www.summersault.com/ . . . . . . . . |