#!/usr/bin/perl
use strict;
use warnings;
my $text = "Dies ist [fett]ein fetter Text[/fett]. [kursiv]Dieser ist Kursiv.[/kursiv] und hier haben wir die Farbe [color=#FF0000]rot[/color]";
my %tags = (
fett => '%s',
kursiv => '%s',
color => '
%s
',
);
my $t=$text;
$t=~s|\[([^\[\]\W]+)\](.+?)\[/\1]|replace($1,$2)|egs;
$t=~s|\[([^\[\]\W]+)=([^\[\]]+)\](.+?)\[/\1]|replace_opt($1,$2,$3)|egs;
print "$t\n";
sub replace
{ return sprintf($tags{shift(@_)},shift(@_)) }
sub replace_opt
{ return sprintf($tags{shift(@_)},shift(@_),shift(@_)) }