While searching for a parse of ASCII bulleted lists the other day, I ended up rolling my own:
while( $text =~ /\G\s*($bullet)\s*([^\n]+)((?:\s*$bullet{2,}\s*[^\n]+)+)?/g ){ ...}
And stumbled across what I believed to be a clever use of
qr to create $bullet from a separate data structure (which permits us to later determine what style of bullet we had, and map it to something):
%bullets = ('*'=>'foo', '+'=>'bar', '@'=>'qux');
#Original, which as ikegami points out, doesn't quite work
#my $bullet= sprintf(qr/[%s]/, join('', keys %bullets));
#Alternate form, that I was trying to make more scrutable, with added
+\Q
my $bullet= qr/[\Q@{[join '', keys %bullets]}\E]/;