use v6; print join ' ', reverse .words for lines.grep(/SRC1/)\ .map({ [+<<.words[*-1, 0], $_]})\ .sort\ .map(*[2]) #### use v6; lines() ==> grep(/SRC1/) ==> map({ [+<<.words[*-1, 0], $_]}) ==> sort() ==> map(*[2]) ==> my @lines; print ~.words.reverse for @lines; #### class Line { has $.str handles 'words'; method Str { self.words.reverse.join(' ') } } multi infix:(Line $a, Line $b) { $a.words[*-1] <=> $b.words[*-1] || $a.words[0] <=> $b.words[0]; } print lines().map({Line.new(str => $_)}).grep(/SRC1/).sort;