Prev: Scalars


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


use v6;

# Creating an array in Perl 6 can be the same as in Perl 5
my @numbers = ("one", "two", "three");

# For debugging prints one will youse the .perl method instead of Data::Dumper:
@numbers.perl.say;   # ["one", "two", "three"]

# In Perl 6 there is no need for the parentheses:
my @digits = 1, 3, 6;
@digits.perl.say;  # [1, 3, 6]

# The Perl 5 qw() operator is replaced by the angle brackets:
my @names = <foo bar baz>;
@names.perl.say;  # ["foo", "bar", "baz"]

# Arrays do NOT interpolate any more in double quoted strings:
say "@names";                        # @names

# So you can safely write the following without escaping the at mark:
say "";                 #

# If you do want to interpolate the values of an array you have to put it inside curly braces:
say "names: {@names}";               # names: foo bar baz

# When accessing elements of an array in Perl 6 the sigil does NOT change!
# This will be very strange for Perl 5 programmers but it has some advantages
# on the long run.

say @names[0];    # foo

# Instead of the quite ugly $#array notation used in Perl 5
# fetching the number of elements of array is done in Perl 6 by the
# elems() function
# Though I think the object oriented writing is much nicer here:
say @names.elems;                   # 3  #TODO: this was elems @names but does not work on 12/6/2010
say @names.elems;                   # 3

# Ranges are available in Perl 6 just as in Perl 5
my @d = 1..11;
@d.perl.say;    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

# It works with characters as well
my @chars = ('a' .. 'd');
@chars.perl.say;    # ["a", "b", "c", "d"]

# The C-style version of the Perl 5 "for" loop is now called "loop"
# but I won't show it here as it is way better to use the
# the iterator style for loop that most people in Perl 5 write as "foreach".
# In Perl 6 it is spelled as "for".

for 1..3 -> $i {
    say $i;       # 1   # 2    # 3     (on 3 lines)

# The same works on arrays as well:

for @names -> $n {
    say $n;        # foo  # bar # baz    (on 3 lines)

# This is one of the cases where you don't need to declare a variable
# using "my". The looping variable is automatically declared for you
# and scoped to the block of the for loop.

# If you need to iterate over the indexes of an array then you could write
for 0..@names.elems -1 -> $i {
    say "$i {@names[$i]}"; # 0 foo       # 1 bar       # 2 baz    (on 3 lines)

# Or you can pick one of the suggestions I got from Moritz Lenz on #perl6 (Thanks Moritz!):
for @names.keys -> $i {
    say "$i {@names[$i]}"; # 0 foo       # 1 bar       # 2 baz    (on 3 lines)

# The keys method borrowed from the hashes will return all the indexes of an array.
# Even if your array has "holes" in it, elements with undef as value, key will
# still include the indexes of such elements.

# split acts similar to its Perl 5 version but the defaults do not apply any more
# and you should read the spec anyway.
# See S32-setting-library/Str.pod for more details.
# ( )

"a,b,c".split(',').perl.say;    # ["a", "b", "c"]

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: Scalars


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.59023889

Support my Perl 6 book!

I am writing a book on Web Application Development in Perl 6 and raising money via crowdfunding. Please support my effort!

Perl 6 Tricks and Treats newsletter

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