push vs. append on arrays in Perl 6

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


push treats the supplied parameters as individual entities and pushes them onto the original array without flattening them.

Both when we push one array:


use v6;

my @a = 'foo', 'bar';
say @a.perl;       # ["foo", "bar"]

my @b;
@b.push: @a;
say @b.perl;       # [["foo", "bar"],]

@b.push: @a;
say @b.perl;       #  [["foo", "bar"], ["foo", "bar"]]

and when we push multiple arrays:


use v6;

my @a = 'foo', 'bar';
my @x = 'abc', 'def';

my @d;
@d.push: @a, @x;
say @d.perl;       # [["foo", "bar"], ["abc", "def"]]


append will flatten the supplied array if there was only one array supplied.


use v6;

my @a = 'foo', 'bar';
say @a.perl;       # ["foo", "bar"]

my @c;
@c.append: @a;
say @c.perl;       # ["foo", "bar"]

@c.append: @a;
say @c.perl;       # ["foo", "bar", "foo", "bar"]

It will treat them as individual entities if more than one arrays are supplied:


use v6;

my @a = 'foo', 'bar';
my @x = 'abc', 'def';

my @e;
@e.append: @a, @x;
say @e.perl;       # [["foo", "bar"], ["abc", "def"]]

An explanation of this can be found on Reddit.

push and append of scalars

If we push or append individual elements to an array, they will be used as elements of that array:


use v6;

my @a;
@a.push: "abc";
say @a.perl;           # ["abc"]

my @b;
@b.append: "abc";
say @b.perl;           # ["abc"]

@a.push: "def", "ghi";
say @a.perl;           # ["abc", "def", "ghi"]

@b.append: "def", "ghi";
say @b.perl;           # ["abc", "def", "ghi"]

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 2017-06-16


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

Perl 6 Tricks and Treats newsletter

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