On Sat, Dec 04, 2004 at 06:01:45AM +0300, Alexey Trofimenko wrote:
: 
:   my $var="foo";
:   {
:     temp $var;
:     say $var;
:   }
: 
: would it be undef or "foo"?

It's undef if we follow Perl 5.  (Early Perls actually kept the original
value, but that was deemed improper at some point.)

: if the former, how could I make $var to  
: contain a copy of original content?
: using analogy with my $x = $x, that's not going to work..
: 
:   temp $var = $OUTER::var?

That's presumably correct if we take "my" as the prototype.  Though
temp is just an operator, not a declarator, and depending on order
of evaluation it's possible that

   temp $var = $var

might do the right thing.  Then again, it might not.

: OTOH,
: 
:   my @a = ... # something not lazy with 10_000_000 elements..
:   {
:      temp @a; # ouch! temporal clone!
:   }
: 
: that could hurt..

Perl 5 actually localizes a binding when you do that rather than
copying.  Perl 6 can presumably distinguish binding from copying,
so we probably need to encourage people to bind temporarily rather
than assigning.  And bare

    temp @a;

would be taken as equivalent to

    temp @a := ();

Larry

Reply via email to