Yesterday I got bitten by the fact that currently in Rakudo, $/ doesn't copy content from the matched string, but instead trusts that it stays in the matched string and doesn't change.
Is this the intended behaviour, or should $/ keep a copy the string contents? As the following examples show, Im hoping for the latter. # should $/ really keep ties to $s like this? <masak> rakudo: my $s = "hello"; $s ~~ /hello/; $s = "goodbye"; say $/ <p6eval> rakudo 29834: OUTPUT[goodb] # I mean, it's not only unintuitive, it's dangerous, too <masak> rakudo: my $s = "abcdefg"; $s ~~ /efg/; $s = "abc"; say $/ <p6eval> rakudo 29834: OUTPUT[Cannot take substr outside stringcurrent instr.: 'parrot;PGE::Match;text' pc 328 (compilers/pge/PGE/Match.pir:220)] # this is how I discovered this behaviour. action at a distance! <masak> rakudo: my $t = 'ABC'; $t ~~ /(A)B(C)/; $t = $0; my $u = $1; <p6eval> rakudo 29834: OUTPUT[Cannot take substr outside stringcurrent instr.: 'parrot;PGE::Match;text' pc 328 (compilers/pge/PGE/Match.pir:220)] # the fact that there's such a method as .orig gives me some hope that # the above is not the intended behaviour. however, as you see, $/.orig # is not implemented in rakudo. <masak> rakudo: my $s = "hello"; $s ~~ /ello/; say $/.orig <p6eval> rakudo 29834: OUTPUT[Method 'orig' not found for invocant of class 'PGE::Match'current instr.: '_block11' pc 60 (EVAL_14:24)] S05:2377: The currently defined methods are $/.from # the initial match position $/.to # the final match position $/.chars # $/.to - $/.from $/.orig # the original match string $/.text # substr($/.orig, $/.from, $/.chars)