while (my $line_in = ) { chomp($line_in); next if $line_in =~ /^#/; # skip comments my ( $style, $content ) = $line_in =~ /^(\w)\s+(.*)$/; my $block = $tag->{ $style }->{ block }; $line_out = join( '', $tag->{ $style }->{ open }, $content, $tag->{ $style }->{ close } ); if ( $block and ! $block_flag ){ $output = join( '', $output, $tag->{ $style }->{ block_open }, $line_out, ',' ); $block_flag = $style; } elsif ( ! $block and $block_flag ){ chop $output; # remove final comma $output = join( '', $output, $tag->{ $block_flag }->{ block_close }, "\n", $line_out, "\n" ); $block_flag = ''; } elsif ( $block ){ $output = join( '', $output, $line_out, ',' ); } else{ $output = join( '', $output, $line_out, "\n" ); } $line_out = ''; } # data with comments __DATA__ R Whatever # First comment R Another whatever K Perl K Monks # Second comment K Is K Cool T Another style R Whatever