At the first glance it looks like bug. Possibly a result of over-optimization. Worth opening an issue at https://github.com/rakudo/rakudo/issues
Best regards, Vadim Belman > On Mar 13, 2021, at 3:29 PM, mimosin...@gmail.com wrote: > > Hi, > > When working with this week challenge for the PerlWeeklyChallenge > <https://perlweeklychallenge.org/>, I noticed this behaviour with TWEAK: > > This does not work: > submethod TWEAK { > $!filelist.lines».split(',').map( -> ($a, $b) { @!show.push: ( $a, $b ) > }); > } > > This works: > submethod TWEAK { > $!filelist.lines».split(',').map( -> ($a, $b) { @!show.push: ( $a, $b ) > }); > return; > } > > It also works with other commands instead of 'return' (like assigning a value > to a variable). From the examples in the documentation, I am not certain this > is the expected behaviour. > > Thanks for this extraordinary language, > > Joan > > > P.S: This is the context where the command appears. Apologies for the > messy-Raku, > ------------------------------ > use Test; > > my $data = '1709363,"Les Miserables Episode 1: The Bishop (broadcast date: > 1937-07-23)" > 1723781,"Les Miserables Episode 2: Javert (broadcast date: 1937-07-30)" > 1723781,"Les Miserables Episode 3: The Trial (broadcast date: 1937-08-06)" > 1678356,"Les Miserables Episode 4: Cosette (broadcast date: 1937-08-13)" > 1646043,"Les Miserables Episode 5: The Grave (broadcast date: 1937-08-20)" > 1714640,"Les Miserables Episode 6: The Barricade (broadcast date: 1937-08-27)" > 1714640,"Les Miserables Episode 7: Conclusion (broadcast date: 1937-09-03)"'; > > class Movies { > > has $.starttime; > has $.currenttime; > has $.filelist; > has @!show; # ( [ time, show ] ) > > submethod TWEAK { > # miliseconds -> seconds > $!filelist.lines».split(',').map( -> ($a, $b) { @!show.push: ( $a, $b ) > }); > return; > } > > method what-show() { > my $position = ( $!currenttime - $!starttime ) % @!show[*;0].sum/1000; > my ($time, $show); > for @!show[*;0] -> $show-time { > $time += $show-time; > return @!show[$show++;1] if $time > $position; > } > } > } > > my $mv = Movies.new( > starttime => '1606134123', > currenttime => '1614591276', > filelist => $data > ); > > is $mv.what-show, '"Les Miserables Episode 1: The Bishop (broadcast date: > 1937-07-23)"';