P02 - Find the last but one box of a list.

Author: Scott Penrose

Specification: P02 - Find the last two elements of a list.


> say ~my_but_last(<A B C D>);


P02 (*) Find the last but one box of a list.
* (my-but-last '(a b c d))
(C D)

Source code: P02-scottp.pl

use v6;

# a. One line example
#   <> can be used to generate an list, similar to perl 5 - qw<a b c d>
#   [] is used to slice a list or array and returns a list
#   * means the number of elements
#   say is like print to stdout with a new line
#   .say can be called as everything is an object
#   we pass a list to [] to ask for the second-last and last elements
"{<A B C D E F>.[*-2,*-1]}".say;

# b. Subroutine example
#   @l lists can be passed in as parameters - no need to use references
#   .elems - is the number of elements, this time called on the object
#   say called in procedure form
#   This time we use the range operator .. to create a Range object
sub my_but_last (@l) {
    return @l[@l.elems-2 .. @l.elems-1];

#   ~ operator stringifies the result: ~<a b> goes to 'a b'
say ~my_but_last(<a b c d>);