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]/;