in reply to Help in using Regular Expressions

I came up with the following:
use warnings; use strict; while (<DATA>) { s|^(?:<bl>)?(.*?)(?:</bl>)?$|<listitem>$1</listitem>|; print } __DATA__ <bl>List item 1 List item 2 <bl>List item a List item b List item c</bl> List item 3</bl>
It does not produce exactly the intended output, but:
<listitem>List item 1</listitem> <listitem>List item 2</listitem> <listitem>List item a</listitem> <listitem>List item b</listitem> <listitem>List item c</listitem> <listitem>List item 3</listitem>
Which, to me at least, looks more likely to be useful.