To me it looks like the loop and the string concat are okay-ish (this is on a "not too beefy" machine (i3 3.33 GHz, 8 GiB RAM):
$ perl6-m -e 'my $file = ""; for ^20000 {$file ~= "$_;"};' real 0m0.500s user 0m0.436s sys 0m0.060s $ perl6-p -e 'my $file = ""; for ^20000 {$file ~= "$_;"};' real 0m1.717s user 0m1.588s sys 0m0.116s $ perl6-j -e 'my $file = ""; for ^20000 {$file ~= "$_;"};' real 0m10.312s user 0m19.917s sys 0m0.352s The smartmatch makes it somewhat slower (but much slower for parrot): $ perl6-m -e 'my $file = ""; for ^20000 {$file ~= "$_;"}; $file ~~ /(\d+) +% ";"/;' real 0m1.210s user 0m1.140s sys 0m0.064s $ perl6-p -e 'my $file = ""; for ^20000 {$file ~= "$_;"}; $file ~~ /(\d+) +% ";"/;' real 0m12.436s user 0m12.141s sys 0m0.240s $ perl6-j -e 'my $file = ""; for ^20000 {$file ~= "$_;"}; $file ~~ /(\d+) +% ";"/;' real 0m13.147s user 0m25.122s sys 0m0.428s And now with say (STDOUT redirected to files, which have 20002 lines each) which makes it significantly slower: $ perl6-m -e 'my $file = ""; for ^20000 {$file ~= "$_;"}; say $file ~~ /(\d+) +% ";"/;' > foo1 real 0m20.079s user 0m19.217s sys 0m0.776s $ perl6-p -e 'my $file = ""; for ^20000 {$file ~= "$_;"}; say $file ~~ /(\d+) +% ";"/;' > foo2 real 1m58.058s user 1m56.899s sys 0m0.328s $ perl6-j -e 'my $file = ""; for ^20000 {$file ~= "$_;"}; say $file ~~ /(\d+) +% ";"/;' > foo3 real 0m38.323s user 0m59.948s sys 0m0.536s All in all I'd say that's reasonable for the time being. (Especially the times with JVM are nowhere near 4 minutes.) If you disagree, please reopen the ticket.