in reply to Parseing FTP Logs

Well, there is Parse::RecDescent, but that seems to be overkill for your problem. If this is all the variation you get you are just a few 'if's away from a solution:

foreach (<$FHIN>){ my ($dow, $month, $dom, $time, $pid, @next)= split; my $user= shift @next; if (not $user=~/^[/) { unshift @next, $user; $user= ''; } my $status= shift @next; $status .= ' ' . shift @next until ($status=~/:$/); my $client= shift @next; ...

As you can see it is not very difficult if the variations are few and easy to differentiate.

If you have more variations I would recommend using a finite state machine. If you search this site for that name or FSM you should find a few nodes that explain what that is