Prev: Simple definition with required parameters

Subroutine with arbitrary number of parameters

Note! This site is about Perl 6.
If you are looking for a solution for Perl 5, please check out the Perl 5 tutorial.

That would be the time to show how to define a subroutine that can get arbitrary number of values, but that requires introducing two concepts at a time. So I'll have to find a better set of examples.

Anyway, if we would like to implement a sum() subroutine that can get any number of values we need to define it like this:


#!/usr/bin/env perl6
use v6;

sub sum(*@values) {
    my $sum = 0;
    for @values -> $v {
        $sum += $v
    return $sum;

say sum(2, 3);      # 5

my @a = (2, 3, 4);
my $z = 5;
say sum(@a, $z);  # 14

That is, we have to say that the expected parameter is a slurpy array. The * means it is slurpy, the @ still means it is an array. It will then accept any value as parameter and put them in the @values array.

So I can call it either with literal scalars or even with a list of arrays and scalars mixed

The Perl 6 Tricks and Treats newsletter has been around for a while. If you are interested to get special notification when there is new content on this site, it is the best way to keep track:
Full name:
This is a newsletter temporarily running on my personal site ( using Mailman, till I implement an alternative system in Perl 6.
Gabor Szabo
Written by Gabor Szabo

Published on 2012-01-01

Prev: Simple definition with required parameters


In the comments, please wrap your code snippets within <pre> </pre> tags and use spaces for indentation.
comments powered by Disqus
Suggest a change
Elapsed time: 2.4063705

Perl 6 Tricks and Treats newsletter

Register to the free newsletter now, and get updates and news.