If you are looking for a solution for the current production version of 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:

**tutorial/subroutines/slurpy_argument.p6**

#!/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

Written by Gabor Szabo

Published on 2012-01-01

Suggest a change

Elapsed time: 3.739915### Perl 6 Tricks and Treats newsletter

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

Elapsed time: 3.739915