Sometimes it's best to create a table and lookup the formatting as you iterate through the file.
#!/bin/perl5
use strict;
use warnings;
my $tag = { K => { open => '%',
close => '',
block => 1,
block_open => '<p>',
block_close => '</p>'
},
R => { open => '<li>',
close => '</li>',
block => 0
},
T => { open => '<td>',
close => '</td>',
block => 0
}
};
my $block_flag = 0;
my $line_out = '';
my $output = '';
while (my $line_in = <DATA>) {
chomp($line_in);
my ( $style, $content ) = $line_in =~ /^(\w)\s+(.*)$/;
$line_out = join( '',
$tag->{ $style }->{ open },
$content,
$tag->{ $style }->{ close } );
if ( $tag->{ $style }->{ block } and ! $block_flag ){
$output = join( '',
$output,
"\n",
$tag->{ $style }->{ block_open },
$line_out );
$block_flag = $style;
}
elsif ( ! $tag->{ $style }->{ block } and $block_flag ){
$output = join( '',
$output,
$tag->{ $block_flag }->{ block_close },
"\n",
$line_out,
"\n" );
$block_flag = '';
}
else{
$output = join( '',
$output,
$line_out );
}
$line_out = '';
}
open OUT, ">", "output.txt" or die;
print OUT $output;
close OUT;
__DATA__
R Whatever
K Perl
K Monks
K Is
K Cool
T Another style
R Whatever
Produces...
<li>Whatever</li>
<p>%Perl%Monks%Is%Cool</p>
<td>Another style</td>
<li>Whatever</li>
A bit extreme, not elegant. But flexible and easily changed if formats change or are added.
Hope this helps
wfsp