$new_cookie = cookie_creator_sub() if (some condition); .... if ($new_cookie) { print $q->header(-cookie=>$new_cookie); } else { print $q->header(); } my %cookie = $q->cookie('info'); .... sub cookie_creator_sub { ..... my %cookie_info = ( 'tempfile' => $tempfile, 'timestamp' => $timestamp, ); $newcookie = $q->cookie(-name=>'info', -value=>\%cookie_info, ); return $newcookie; }