in reply to Re^4: referencing slices - love that DWIM
in thread referencing slices - love that DWIM

... then wouldn't [\(@foo)] have to return a reference to that list ?

Not sure what it would have to... :)  but as it is, it returns a reference to an anonymous array which has been initialised with references to the list's individual elements/values. Something quite different.

Replies are listed 'Best First'.
Re^6: referencing slices - love that DWIM
by syphilis (Archbishop) on May 17, 2008 at 14:45 UTC
    Not sure what it would have to... :)

    Yeah ... sometimes I get a bit literal about these things. My reasoning (undoubtedly flawed) is along the lines that the square brackets ([]) return a reference to whatever is within those brackets ... and if it's a list that's within those brackets (as stated by the docs), then those square brackets must be returning a reference to that list.

    it returns a reference to an anonymous array which has been initialised with references to the list's individual elements/values

    Something about that doesn't feel right to me. Do you mean "it returns a reference to an anonymous array which has been initialised with the list's individual elements/values" - and that, in this case, those "elements/values" are actually references ?

    It's probably a bit confusing to be asking these sorts of questions in terms of the return of \(@foo). Surely there are simpler constructs that also return a list. Does, eg (1..10) return a list ?

    Cheers,
    Rob
      Do you mean "it returns a reference to an anonymous array which has been initialised with the list's individual elements/values" - and that, in this case, those "elements/values" are actually references ?

      Depends on exactly which list we're talking about... I was referring to the original values stored in @foo, and you're presumably thinking of the values after the referencing operation \(...) has been applied — in a human language it's not as easy to express things clearly as it is in Perl :)

      Anyhow, the net effect of this is:

      my @foo = (1, 2, "foo"); my $bar = [\(@foo)]; use Data::Dumper; print Dumper $bar; __END__ $VAR1 = [ \1, \2, \'foo' ];

      IOW, "$bar->[2]" would produce something like SCALAR(0x814ec28), which you'd need to dereference (${$bar->[2]}) to get at the value "foo".

      And yes, (1..10) is a list.

        Depends on exactly which list we're talking about...

        Yes - we were talking about different lists.

        I think I start to see the light. Thanks almut, thanks Fletch.

        Cheers,
        Rob