http://www.perlmonks.org?node_id=72613


in reply to NEWBIE Brain Teaser

I expected:
1
2
3
4
5
Update:I understand what is going on now. Thanks for the clarification kundra.

Another Update:I just want to make sure that I understand this. In the "foreach" loop $each is assigned a reference to a scalar value in @list. So when $each is modified in the loop what is actually being modified is $list[$i] which happens to be same value as $newlist[$i]. Right?

Good Hunting,
kha0z

Replies are listed 'Best First'.
(kudra) Re2: NEWBIE Brain Teaser
by kudra (Vicar) on Apr 15, 2001 at 01:21 UTC
    If you want to understand what's going on, you can try adding some print statements. This should make it pretty clear what's happening.
    use strict; my @list = qw(1 2 3 4 5); my $each = ""; my $i = 0; my @newlist = (); foreach $each (@list) { print "Each was: $each\n"; #new $each *= 2; print "Each is: $each\n"; #new $newlist[$i] = $each; print "New list is: $newlist[$i]\n"; #new print "Old list is $list[$i]\n\n"; #new ++$i; } for ($i= 0; $i<5; ++$i) { print ($newlist[$i] - $list[$i], "\n"); }
    And maybe in the future it would be a good idea for the reason for what happens to be included in the 'black box of enlightenment' so that people won't just be puzzled, but will learn, too? (Or maybe not; it's good debugging practice to figure out where the unexpected happens. Why have the box at all? There isn't much point to just show the output, since people can just run the program to see the output.)
      Thanks for the feedback. I was debating whether or not to post the solution or some kind of hint along with the answer. I'll try some different things in the future and see what seems to be the most helpful to people. For this one, I plan on posting the answer tomorrow.

      I think if people can immediately check the answer and see that their first instinct was wrong, this will tend to get them involved more and make them curious...I think they'll start wondering where they went wrong and figure it out for themselves.

      Why the black box? Just for aesthetic reasons...makes it a little more fun, I think.

      kudra said:
      And maybe in the future it would be a good idea for the reason for what happens to be included in the 'black box of enlightenment' so that people won't just be puzzled, but will learn, too?

      I agree, some further explanation to the answer should be added.

      jmoen