> On Sat, Jul 05, 2003 at 09:51:29AM -0600, Luke Palmer wrote:
> 
> > Actually, you can't reference a slice!  Where the heck does the
> > reference point?  I would probably do:
> 
> Of course not. I presume it points to something non-existent just like
> a substring reference would in perl5 :-)
> 
> $ perl -le '$a = "pie contest"; $b = \substr $a, 1, 9; $$b = "arro"; print $a'
> parrot

I don't think you're supposed to do that:

    % perl -le '$a = "foobar';  $b = \substr $a,2,3; $a .= "jibby"; $$b = "OBA"; print 
$a'
    foobarjibby

Because it copies the buffer to resize, and $b points back into the old buffer...

But a slice can be used as an lvalue, so I guess it would be valid to
reference it (just like substr *should* be).

The tricky stuff comes in in cases like:

    my @a = (1,2,3,4,5);
    my $sref = [EMAIL PROTECTED];
    shift @a;
    @$sref = (4,3,2);
    @a  # ?  (4,3,2,5) or (2,4,3,2) ?

Those are just semantics to be nailed down, but it's tricky
nonetheless... oh and let's not forget multidimensional slices.

This really comes down to an issue that I've been biting my
fingernails about for some time: iterators.  There are two mutually
exclusive kinds of iterator semantics:  list and array.  In the above
example, (4,3,2,5) would be list semantics; (2,4,3,2) would be array.
And both of them are correct (or wrong) in certain applications.

For implementation reasons, I'm not sure it's possible to have both
kinds of iterator pointing into the same kind of array.  Perhaps we
need a List class for an array which doesn't support indexing... but
then it doesn't really deserve the @ medal does it?

Hmm...

Luke

> Nicholas Clark

Reply via email to