use strict; use warnings; package cookies; use Data::Dumper; $Data::Dumper::Indent = 1; $Data::Dumper::Useqq = 1; use CGI qw/:standard/; use CGI::Cookie; my %cookies = (); sub start { foreach ( cookie() ) { my %h = cookie($_); unless (exists $h{$_} ) { my (@h) = %h; @h = reverse @h; %h = ($_,$h[1]); } print '### Debug ### Cookie %h: ', Dumper(\%h), '###### '; $cookies{$_} = \%h; } 1; } sub get { my($name) = @_; return $name ? $cookies{$name} : \%cookies; } 1; package main; use CGI qw/:standard/; use Data::Dumper; $Data::Dumper::Indent = 1; $Data::Dumper::Useqq = 1; sub say { print "@_", "\n"; } my $cook1 = 'url=url&%2Fcms%2Fadmin%2Fx.cgi&test&77'; say $ENV{HTTP_COOKIE} = $cook1; cookies::start; say Dumper %cookies; my $c = cookies::get('url'); say $c->{'url'}; say $c->{'test'}; say; say '============='; $cook1 = 'url=%2Fcms%2Fadmin%2Fx.cgi'; say $ENV{HTTP_COOKIE} = $cook1; cookies::start; say Dumper %cookies; my $c = cookies::get('url'); say $c->{'url'}; say $c->{'test'}; say; 1;