note
repson
If you look at the [cpan://HTTP::Cookies] source code, then
you can see that the <code>$cookie_jar->load()</code> method
does no sanity checking on its filename argument. Instead
it passes it unchanged to [open]. We can use this as a
feature.
<code>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 was
print $cook->as_string;
</code>
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.
<p>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
<code>$cookie->as_string</code>
data over 512 characters long.
57713
57713