Re: temp $var;

2004-12-03 Thread Larry Wall
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


temp $var;

2004-12-03 Thread Alexey Trofimenko
  my $var="foo";
  {
    temp $var;
say $var;
  }
would it be undef or "foo"? 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?
OTOH,
  my @a = ... # something not lazy with 10_000_000 elements..
  {
 temp @a; # ouch! temporal clone!
  }
that could hurt..