I was tinkering with some code tonight and realized a clean way to solve a problem was to pass an array of references to a sub. Problem was the entities I wanted references to were being obtained as a slice of an array. So I tried what seemed to me to be the obvious thing:

my @sliceRefs = \@array[4, 5, 9];

and what do ya know? It just worked!

After I had tried the construct and it worked I had a vague memory of reading about it somewhere, but I sure can't find it now. It's not in the slice section in perldata and I can't find anything in perlref. Not that it matters. DWIM rules, but I'd be interested to find where it is documented.

Oh, you want to test it for yourself? Try:

my @array = (1 .. 10); my @sliceRefs = \@array[4, 5, 9]; ${$sliceRefs[2]} = -10; print "@array";

Perl is environmentally friendly - it saves trees

Replies are listed 'Best First'.
Re: referencing slices - love that DWIM
by BrowserUk (Patriarch) on May 17, 2008 at 11:11 UTC

      With the implication (extrapolated from the perlref quote) that \ notices that it is operating on a list and generates a list of references rather than a reference to list. I had a feeling that I'd seen something more explicit than that, although the quote from the docs does shed a some light on why it does what it does.


      Perl is environmentally friendly - it saves trees
        ... rather than a reference to list

        I think there is no such thing as a reference to a list, because a list - in contrast to an array - is not internally represented in a way that it could be referenced in its entirety...