As Corion mentioned, your best bet is probably one of the many fine CSV parsing modules.
If you want to code your own solution, here is my suggestion. It will, I think (but this is untested), produce the same output as the code in wilsond's reply, but introduces the map and grep built-ins and a little more use of regexes (see perlre, perlretut and perlrequick), all of which I think you will find rewarding.
(BTW: I, also, am afraid I do not clearly understand your requirements, but perhaps this example may yet be helpful.)
use warnings;
use strict;
my $splitter = '|';
my $joiner1 = $splitter;
my $joiner2 = ' ';
while (my $record = <DATA>) {
my ($head, @body) =
grep ! m{ \A [\nSQ] \z }xms,
split m{ \Q$splitter\E }xms,
$record
;
print
join $joiner2,
map join($joiner1, $head, $_),
@body
;
print "\n";
}
__DATA__
AAAA|Q|dfadfsfaf|S|asfddsfasfdasdfaf|werwqr345435|
BBBB|Q|ccccccccc|S|ddddddddddddddddd|eeeeee111111|
FFFF|Q|ggggggggg|S|hhhhhhhhhhhhhhhhh|iiiiii222222|
Output:
AAAA|dfadfsfaf AAAA|asfddsfasfdasdfaf AAAA|werwqr345435
BBBB|ccccccccc BBBB|ddddddddddddddddd BBBB|eeeeee111111
FFFF|ggggggggg FFFF|hhhhhhhhhhhhhhhhh FFFF|iiiiii222222
|