Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

temp $var;

7 views
Skip to first unread message

Alexey Trofimenko

unread,
Dec 3, 2004, 10:01:45 PM12/3/04
to perl6-l...@perl.org

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..

Larry Wall

unread,
Dec 3, 2004, 10:10:28 PM12/3/04
to perl6-l...@perl.org
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

0 new messages