Kaum macht man es richtig, schon geht es! ;)
use CGI qw();
my $cgi = CGI->new;
my %user = (mitarbeiter_id => 123);
my $session_id = 456789;
my @cookies = (
$cgi->cookie(
-name => 'ma_id',
-value => $user{mitarbeiter_id},
-expires => '+3d',
-path => '/',
),
$cgi->cookie(
-name => 'session_id',
-value => $session_id,
-expires => '+3d',
-path => '/',
));
print $cgi->header(-type => 'text/plain;charset=UTF-8', -cookie => [@cookies]);
print "Im HTTP-Response wurden folgende Cookies geschickt:\n";
print map { sprintf "%s<-->%s\n", $_->name, $_->value } @cookies;
Erklärung: weil das Modul CGI.pm keine klare Trennung von HTTP-Request und -Response vornimmt (wie z.B. bei libwww-perl), sondern alles in eine Objektinstanz stopft, hast du falsch geschlussfolgert, dass man gerade soeben gesetzte Cookies auch wieder mit der Methode cookie auslesen kann. Tatsächlich bezieht sich das Setzen auf HTTP-Response, das Auslesen auf HTTP-Request (wo sie logischerweise noch nicht vorhanden sein konnten). Die Vorgehensweise ist einfach, sich die Cookieobjekte zu merken. Sie sind von der Klasse CGI::Cookie.