Beginners and Arrays

I've taught beginners before. I know that beginners
often get confused by the use of $ to denote
single array elements (e.g. $array[0]). I know
why they get confused but I think I'm pretty good
at getting them to understand it - this is, at least, partly because I think that the rule makes sense.

Yesterday I gave my first beginners course for a while. More importantly it was the the first beginners course I'd given since we've known a lot about the shape of Perl 6.

As always, there was someone who didn't like array (and hash) elements using $. "Oh, I understand exactly why it's there", he said, "but I just don't think it's the most logical way to do it." Of course I disagreed with him and tried to bring him round to my way of thinking. I found this was harder than usual because I now know that in Perl 6 array elements will be accessed using @. It's a lot harder trying to explain away something as logical when you know that it's going to change in the near future.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Without JavaScript enabled, you might want to
use the classic discussion system instead. If you login, you can remember this preference.

Please Log In to Continue

I haven't taught Perl to beginners, but I've taught various bits of XML to beginners and intermediate programmers alike.

I've found it to be rather common to need to apologize for the state of the technology being presented. This could be something as simple as using $array[0] vs. @array[0] in Perl, or much more unfortunate like the state of XML. Most recently, I had to teach DTD syntax and usage to a bunch of programmers who were going to be using XML Schema, and had to defend DTDs, only to illustrate t

I find the best thing to do is just lay it out straight. "It seemed to make sense at the time, but it turned out not to be a good idea. Cope. We're fixing this." I can pretty much guarantee it's not the first thing like this your students will have come across...:)

As I understand it, the funny character demarks the context of the variable. I haven't played around with this (yet), but what if the array was a list of refs to other arrays? Would that be @array[0] or @$array[0]? If the former, then all the more reason the funny character helps, as it denotes the context.

@$array[0] binds the @ more tightly than the [0], so it expects $array to be an array ref, which you're de-referencing, rather than $array[0] being the array ref. Except it doesn't work, because as you know, you don't say @x[0], you say $x[0], so when you say @$array[0], it thinks you're dereferencing $array, not @array, and $array doesn't exist (well it might, but it's not what you meant).

Now @{$x[0]} will give you the de-referenced array in the first entry in th

I never have a problem with the $/@ distinction in my beginner's classes. I simply grind it into their heads that "$ always means 'one' of something". One element of an array, one item from a hash, and in the case of scalars it's self evident. Keeping the rules simple (at least to begin with), having a "catchphrase" that embodies the rule, and repeating it often works well.

And as for Perl 6... I don't like scaring the novices with evil that hasn't yet come to pass.