http://www.perlmonks.org?node_id=57729


in reply to LWP Cookies

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.