Hi,
Yuval Kogman wrote:
> On Sat, Aug 27, 2005 at 17:38:26 +0200, Ingo Blechschmidt wrote:
>> ($foo, $bar)[0] =:= $foo;
>> # False (i.e. no difference to arrays) or true?
>
> I think this is true, because you can say:
>
> ($foo, $bar) = (1, 2);
>
> And more curiously:
>
> for ($foo, $bar) { $_ = "Value" }; # implcit is rw
> for ($foo, $bar) -> $bah { $bah = "Value" }; # not is rw... is
> # it a different elem? or the same elem with behavior changed
> # for this scope?
I'd say (and this is how it's implemented in PIL2JS currently [1]) it's
the same element, but wrapped in a proxy which dies on STORE requests.
I.e.:
for ($foo, $bar) -> $bah { $bah = "Value" } # is really
for ($foo, $bar) -> $bah is rw {
(new Proxy:
FETCH => { $bah },
STORE => { die "Can't modify readonly..." },
) = "Value";
}
> If flattenning becomes involved, then it gets harder to decide:
>
> ($foo, @array)[2] =:= @array[1]; # i don't know about this
> ($foo, [EMAIL PROTECTED])[2] =:= @array[1]; # i think this is definately false
Hm, I'd say both are true. Consider:
my $var;
sub foo ([EMAIL PROTECTED]) { @args[0] =:= $var };
foo($var, $other, $stuff);
# Should definitely be true, I think.
--Ingo
[1] FYI, here's the relevant snippet of PIL2JS's subroutine signature
handling code ([2], lines 263-265):
unless($self->{tpParam}{isWritable}) {
push @js, "$jsname = new PIL2JS.Box.ReadOnly($jsname);";
}
[2] http://svn.openfoundry.org/pugs/perl5/PIL2JS/lib/PIL/Params.pm
--
Linux, the choice of a GNU | The computer revolution is over. The
generation on a dual AMD | computers won. -- Eduard Bloch
Athlon! |