in reply to Returning lists vs arrays

This illustrates the differences that I am referring to.
!/usr/bin/perl use strict; use warnings; sub list { return ( "a", "b", "c") } sub array { my @ret = ( "a", "b", "c"); return @ret; } sub ar_as_list{ my @ret = ( "a", "b", "c"); return $ret[-1] unless wantarray; return @ret; } my $a = list(); my $b = array(); my $c = ar_as_list(); print "list >$a<\narray >$b<\nar_as_list >$c<\n"; __DATA__ list >c< array >3< ar_as_list >c<

Replies are listed 'Best First'.
•Re: Re: Returning lists vs arrays
by merlyn (Sage) on Jan 21, 2003 at 05:10 UTC
    Your model is perhaps flawed. At no time does Perl "return" an "array".

    A more accurate model is that Perl calls a subroutine with a flag that says "I want a scalar" or "I want a list". When the last expression of the subroutine is evaluated (such as for a return operator), that subroutine gets scalar or list eval context applied to it, as appropriate.

    So, a subroutine returns a list or scalar. Always. It never returns an array. If you write return @a, it will return the length of array @a in a scalar context, or a list copied from the contents of @a in a list context. At no time has it "returned" the "array" @a.

    Clear now?

    -- Randal L. Schwartz, Perl hacker
    Be sure to read my standard disclaimer if this is a reply.

Re: Re: Returning lists vs arrays
by OM_Zen (Scribe) on Jan 20, 2003 at 17:44 UTC
    Hi ,

    sub array{ my @ret = ( "a", "b", "c", "d"); return \@ret; } my $b = &array(); my @B = @$b;