split and sprintf will probably do what you want.
knoppix@Microknoppix:~$ perl -Mstrict -Mwarnings -E '
> my $line = q{May 2 04:06:15 lon-pop.mail.mydom.com pop3login: LOGOU
+T, user=gonenow, ip=[::ffff:127.0.0.1], top=0, retr=0, rcvd=24, sent=
+5560, time=1};
> my ( $mon, $day, $time, $dom, $login, $remainder ) =
> split m{:?\s+}, $line, 6;
> my %monthNos = do {
> my $no = 0;
> map { $_ => ++ $no }
> qw{ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec };
> };
>
> my $yr = q{2012};
> my $csv = sprintf q{%02d/%02d/%s %s,%s,%s,%s},
> $day, $monthNos{ $mon }, $yr, $time, $dom, $login, $remainder;
>
> say $csv;'
02/05/2012 04:06:15,lon-pop.mail.mydom.com,pop3login,LOGOUT, user=gone
+now, ip=[::ffff:127.0.0.1], top=0, retr=0, rcvd=24, sent=5560, time=1
knoppix@Microknoppix:~$
I hope this is helpful.
Update: After replying to your reply I realised I had totally missed the need to quote the variable message and add the user and ip to the csv line. Here is revised code.
knoppix@Microknoppix:~$ perl -Mstrict -Mwarnings -E '
> my $line = q{May 2 04:06:15 lon-pop.mail.mydom.com pop3login: LOGOU
+T, user=gonenow, ip=[::ffff:127.0.0.1], top=0, retr=0, rcvd=24, sent
+=5560, time=1};
> my ( $mon, $day, $time, $dom, $login, $remainder ) =
> split m{:?\s+}, $line, 6;
> my %monthNos = do {
> my $no = 0;
> map { $_ => ++ $no }
> qw{ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec };
> };
>
> my $yr = q{2012};
> my ( $user, $ip ) =
> $remainder =~ m{user=([^,]+),\s+ip=\[([^\]]+)};
> $remainder = qq{"$remainder"};
> my $csv = sprintf q{%02d/%02d/%s %s,%s,%s,%s,%s,%s},
> $day, $monthNos{ $mon }, $yr, $time, $dom,
> $login, $remainder, $user, $ip;
>
> say $csv;'
02/05/2012 04:06:15,lon-pop.mail.mydom.com,pop3login,"LOGOUT, user=gon
+enow, ip=[::ffff:127.0.0.1], top=0, retr=0, rcvd=24, sent=5560, time=
+1",gonenow,::ffff:127.0.0.1
knoppix@Microknoppix:~$