Camelia

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

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

Both when we push one array:

examples/push_array.pl6

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:

examples/push_2_arrays.pl6

use v6;

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

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

append

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

examples/append_array.pl6

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:

examples/append_2_arrays.pl6

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:

examples/push_array_scalars.pl6

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:
Email:
Full name:
This is a newsletter temporarily running on my personal site (szabgab.com) using Mailman, till I implement an alternative system in Perl 6.
Gabor Szabo
Written by Gabor Szabo

Published on 2017-06-16



Comments

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

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.
Email:
Name: