1.frankline unfortunately, your substition gives an incorrect sub for the case \*/, which also appears in the ascii art because it produces an extra '\' where there should be only 1
Here is the art btw:
my $xmas = q%
__,_,_,___) _______
+
(--| | | (--/ ),_) ,_)
+
| | | _ ,_,_ | |_ ,_ ' , _|_,_,_, _ ,
+
__| | | (/_| | (_| | | || |/_)_| | | |(_|/_)___,
+
( |___, ,__| \____) |__, |__,
+
+
| _...._
+
\ _ / .::o:::::.
+
(\o/) .:::'''':o:.
+
--- / \ --- :o:_ _:::
+
>*< `:}_>()<_{:'
+
>0<@< @ `'//\\'` @
+
>>>@<<* @ # // \\ # @
+
>@>*<0<<< __#_#____/'____'\____#_#__
+
>*>>@<<<@<< [__________________________
+]
>@>>0<<<*<<@< |=_- .-/\ /\ /\ /\--. =_-|
+
>*>>0<<@<<<@<<< |-_= | \ \\ \\ \\ \ |-_=-|
+
>@>>*<<@<>*<<0<*< |_=-=| / // // // / |_=-_|
+
\*/ >0>>*<<@<>0><<*<@<< |=_- |`-'`-'`-'`-' |=_=-|
+
___\\U//___ >*>>@><0<<*>>@><*<0<< | =_-| o o |_==_|
+
|\\ | | \\| >@>>0<*<<0>>@<<0<<<*<@< |=_- | ! ( ! |=-_=|
+
| \\| | _(UU)_ >((*))_>0><*<0><@<<<0<*< _|-,-=| ! ). ! |-_-=|
+_
|\ \| || / //||.*.*.*.|>>@<<*<<@>><0<<@</=-((=_| ! __(:')__ ! |=_==_
+-\
|\\_|_|&&_// ||*.*.*.*|_\\db//__ (\_/)-=))-|/^\=^=^^=^=/^\| _=-_
+-_\
""""|'.'.'.|~~|.*.*.*| ____|_ =('.')=// ,------------.
+
jgs |'.'.'.| ^^^^^^|____|>>>>>>| ( ~~~ )/ (((((((())))))))
+
~~~~~~~~ '""""`------' `w---w` `------------'
+ %;
I solved the problem by using the suggestion of moving the art into __DATA__ using $xmas = <DATA>; The follow on posts were because I think that this behavior is broken for the case of single versus double quoted strings, but thanks for trying.