Как насчет Parse :: BBCode ?
Обновление:
Вам не нужно выводить HTML с этим модулем.Вместо этого попробуйте следующее:
#!/usr/bin/perl
use strict;
use warnings;
use Parse::BBCode;
my %tags = map { $_ => '%s' } qw(
b i u color size font highlight left right center indent email url thread post
list img video code php html quote noparse attach bug PGN2 PGN3 threadvb wiki
);
my $parser = Parse::BBCode->new ( { tags => \%tags } );
my $string = '[size="9"]Some larger text. [i]Italic[/i] here.[/size]And [b]bold[/b] text.';
my $rendered = $parser->render( $string );
print "$rendered\n";
Таким образом, вам не нужно разбирать текст самостоятельно, что является хорошей вещью ™.