If you look at the HTTP::Cookies source code, then
you can see that the $cookie_jar->load() method
does no sanity checking on its filename argument. Instead
it passes it unchanged to open. We can use this as a
feature.
my $cookies = new HTTP::Cookies;
$cookies->set_cookie(0,'foo','foog','/','.blah.com','80',0,0,1000,1,{}
+);
$cookies->set_cookie(0,'moo','1025','/','.blah.com','80',0,0,1000,1,{}
+);
my $text = $cookies->as_string;
# do anything to $text, and come back later
pipe Read, Write;
print Write "#LWP-Cookies-1.0\n" . $text;
close Write;
my $cook = new HTTP::Cookies;
$cook->load( '<& ' . fileno(*Read) );
# $cook is now the same as $cookies above and we can use it as if it w
+as
print $cook->as_string;
What I did here was use a standard funtion that creates
two connected filehandles. Then sent the data to the part
called Write, then closed it to flush it and signal EOF.
Then in a new HTTP::Cookies object we load the data by
telling it to open its filehandle to the same file
descriptor as the other end of our connected handles.
On the whole this solution seems to do the job requested
without requiring disk I/O,
but using simple disk I/O may be a clearer method and seems
to be necessary under Win98 for
$cookie->as_string
data over 512 characters long.
|