On Fri, Oct 5, 2018 at 7:44 PM ToddAndMargo via perl6-users
<perl6-us...@perl.org <mailto:perl6-us...@perl.org>> wrote:
On 10/5/18 3:15 PM, Ralph Mellor wrote:
> Well I guess my first way of explaining it was a complete bust. :)
>
> It's not going to be worth me discussing your reply to my first
attempt.
Hi Ralph,
Thank you! I am going to have to save it for later and read it
over REAL SLOW!
:-)
-T
On 10/5/18 5:50 PM, Brandon Allbery wrote:
You know how in perl 5, if you do:
my @a = qw(a b c);
my @b = (1, @a, 2);
@b will be (1, 'a', 'b', 'c', 2)? That's flattening. $b[1] will be 'a'.
Perl 5 doesn't really understand nested data structures, so you have to
simulate them with refs. If you use [@a] instead, $b[1] will contain an
arrayref that must be dereferenced to get at its contents. (Which it
tries to hide from you by letting you say $b[1][0] instead of
$b[1]->[0], which is what it's really doing. But if you say 'my $c =
$b[1]', you need $c->[0] to get its first item, not $c[0]. Refs are
better than what we had to do in Perl 4 with globs, but they're still
kinda icky.)
Perl 6 understands nested lists and other data structures, and doesn't
flatten. If you do the above in Perl 6, you get (1, ('a', 'b', 'c'), 2)
with a nested list. @b[1] is ('a', 'b', 'c') and @b[1][0] is 'a', and
there's no hidden dereference operator involved, nor a "magic" arrayref
to be dereferenced.
Hi Brandon,
I am following
my @a = qw(a b c);
my @b = (1, @a, 2);
@b is (1, ('a', 'b', 'c'), 2)
So would flattening @b be (1 a b c 2) ?
If I wanted to assign a flattened @b to @c, how would I do that?
Thank you for the help!
-T