The (.*?) pattern will match an empty string. Thus $0 gets the dollar sign, $1 is "", and "$" ~ "" (i.e., "$") gets replaced by "" ~ "USD" (i.e., "USD").
So the net result is to replace the single dollar sign by "USD", resulting in "USD1.23". You might want to remove the ? modifier from .*?, so that the expresssion is greedy instead of eager. Pm On Mon, May 06, 2019 at 07:12:39PM -0700, Tony Ewell via perl6-users wrote: > Hi All, > > What am I doing wrong here? > > $ p6 'my $x="\$1.23"; $x~~s/("\$") (.*?)/$1USD/; say $x;' > USD1.23 > > I am expecting to seeĀ `1.23USD` > > Many thanks, > -T