my $text = "[Part1,Part1_XX,Part2],[Part3,Part3_XX],[Part4, Part5],[Part6]"; # die folgenden Zeilen quasi von hinten nach vorne lesen: my @data = # fuer jeden Treffer wird der _XX-Teil entfernt und die Kommata bereinigt # map muss das Element selber wieder ausgeben; daher das $_ am Ende map { s/[^,]+_XX//g; s/^,|,$//g; s/,,/,/g; $_ } # suche nach Text in eckigen Klammern und fange ihn ein mit runden Klammern; # liefere alle Treffer als Liste ans map {} $text =~ m{\[([^\]]+)\]}g; print join "\n", @data, ''