----- Original Message -----
From: "Michael R. Wolf" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>

> >"Leon" <[EMAIL PROTECTED]> writes:
> > But my instinct tells me that what you were
> > trying to say is that with each iteration, the variable my
> > $b++ was resetted, hence no increment (remains as
>
> It may *appear* that way, but that's not *exactly* what's
> happening.  What *is* happening is that every time you
> specify "my", you _create_ a new variable.  (That has the
> effect of _resetting_ it, but there is no "reset" operation
> taking place.)  That newly created variable (with a value of
> undef) is incremented (from 0 (the integer interpretation of
> undef)) to 1.  At the end of the loop (at the close brace,
> actually) the variable is destroyed, reclaimed by memory,
> and no longer accessible.
>
> It's like having a new baby each iteration of the loop and
> then giving it a birthday party.  At the end of the party,
> you'll always have a 1 year old baby.  On the other hand, if
> you give birth to that baby outside the loop, then every
> time through the loop, you've got the same baby, and are
> therefore correct in relying on that baby getting older at
> every birthday party in the loop since it remembers its
> state (history) from the previous iteration.
>
> Births are expensive, but they *do* guarantee that you've
> got a brand, spankin' new object to work on.  But in this
> case, you don't really want to go through all the expense
> and resources only to have it destroyed (I'd say "die", but
> that's another keyword) at the end.  Skip the birth/death
> cycle.  Have one birth only.  It's a lot less traumatic on
> the parents (memory allocator) who have to provide the
> nutrients (RAM) and energy (CPU cycles) for it's creation
> (allocation).  And then it dies once (and only once) when it
> hits its end of life, but that's *not* at the end of the
> loop, it's further down the program.

A great anology. This clears up everything ! Therefore, with each iteration
of a loop, it is a "birth of a new baby" and its happy&sad journey ends at
the "the curly Heavenly gates =>}".

In the course of studying, I also wish to let Members know the following:-

use strict;
my $number = 0;
OUTER : while ($number < 3){
          $number++; # line 4
          my $counter = $number;
          my $number = 3;
          $number = 10; # line 7; does not alter the value of line 4
                                 # So Perl is pretty smart eh!

          print '*'x35,"\n($counter).",
                ' OUTER lexically scoped $number is not',
                " resetted by \$number = 10 in line 7 as can be seen
here.\n",
                '*'x35,"\n";

          INNER : while ($number < 15){
                        $number++;
                        print "INNER while \$number =
$number\n";#'&'x35,"\n";
          };
};

Thanks Michael R. Wolf  & Members.




_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to