in reply to Re: I've read perlref
in thread I've read perlref

why perl uses references to pass arrays?
Because it's easier... and more efficient.
Well, it's certainly not easier as you need to explicitely put a reference in (and later dereference the reference). I also doubt this would be more efficient if direct passing of arrays was available in Perl.

The real reason is that there's no way in Perl to directly pass an array - even with a @ prototype, you're still passing a reference. Perl flattens an array into a list when used in list context. That's the reason we use references (or globs, but that's very perl4-ish) to pass arrays.

Abigail

Replies are listed 'Best First'.
Re: Re: I've read perlref
by Anonymous Monk on Mar 11, 2004 at 11:46 UTC
    yesyes, I understand the efficiency argument (copying data rather than pointing to it), but it certainly is not easier, or quicker to develop.

    And yes, you can only pass one value from a subroutine, even if that value is a list of other values. Joy. Rather than being able to directly return a int, a list, a different list I have to stuff all that into onebig list and start playing with references all over again!

    Why they want me to do this stuff in Perl and not Python I dont know....

      Did you ever try to return multiple values from a subroutine?

      sub multi { return 1,2,'a','b',3,4; }; print $_ for (multi);

      It's not as nice as Pythons way, where you can return multiple arrays without having to think about references, but it's certainly transparently possible.