in reply to Re: NEWBIE Brain Teaser
in thread NEWBIE Brain Teaser

Alright, I also expected a return of 1,2,3,4, and 5 as the values printed out. However, I think I have learned where I went wrong. I just wanted to make sure I understood the last paragraph of HOW THE CODE WORKS.

If I understand this correctly, the $each variable actually acts as a reference to the current place in the array that the foreach loop is currently at. So in effect we are actually altering the first array with the $each *= 2; and then simply setting the $i place in the @newlist to be the same value. This is the reason why we are subtracting, in the last loop, the exact same values from each other.

Replies are listed 'Best First'.
Re: Re: Re: NEWBIE Brain Teaser
by nysus (Parson) on Apr 15, 2001 at 08:27 UTC
    Yes, although I do not know if "referencing" is the accurate term. As the post above mine pointed out, the book "Learning Perl" uses the term alias. How that is different from referencing, I'm not entirely certain and maybe a more monkish Monk than I could answer that.
        Alright, then in learning from this brain teaser not only have I learned the original point, but also stumbled upon another concept that I need to read up on. Thank you!

        I take it then that aliasing was meant to make our lives easier both in how we code as well as in how we think about the whole process?

      i am not a "more monkish Monk", but i did get curious about this behavior of foreach. This is an alias (example modified from _Advanced Perl Programming_ (O'rielly) by Sriram Srinivasan):
      $a = 10; # saclar a @a = (1, 2, 3); # array a *b = *a; # aliases b to a $a++; # increments $a :) $b++; # same as saying $a++ print "$b, $a"; # prints: 12 12 @b[0] = 4; # same as saying $a[0] = 4
      as you can see, the aliasing on line 3 makes any manipulation of $b, @b or %b manipulate $a, @a, %a respectively. hope this helps and is not too confusing. if i'm wrong, tell me :)
        That aliasing command relies on typeglobs to work.

        Therefore it will only work with global variables. (ie you must localize with local, not my.) I stay away from that except when it really doesn't make sense not to. :-)

        The mostly widely used form of that kind of aliasing in modern Perl is for exporting symbols using Exporter.

        FWIW one goal for Perl 6 is to kill typeglobs entirely. The functionality should be available, but by a different mechanism...