On Tue, 09 Sep 2014 00:13:13 +0200
lee <l...@yun.yagibdah.de> wrote:

> Shawn H Corey <shawnhco...@gmail.com> writes:
> 
> > On Mon, 18 Aug 2014 16:17:53 +0800
> > Ken Peng <o...@dnsbed.com> wrote:
> >
> >> sub myfunc {
> >>   my @x=(1,2,3);
> >>   return \@x;
> >> }
> >> 
> >> # or,
> >> 
> >> sub myfunc {
> >>   my @x=(1,2,3);
> >>   return [@x];
> >> }
> >
> > # or
> >
> > sub myfunc {
> >   return [ 1, 2, 3 ];
> > }

This returns a reference to an anonymous array.

> 
> Is there a difference to
> 
> sub myfunc {
>   return ( 1, 2, 3 );
> }

This returns a list, which can be stored in an array.

> 
> ?  And my understanding was/is that in
> 
> sub myfunc {
>   my @x=(1,2,3);
>   return \@x;
> }
> 
> a reference would be returned to an array that ceases to exist when
> the function returning it has finished.  At the point the function
> returns to, there isn't anything left the reference could refer to.
> 
> Or is there?

The reference to the array is returned. Perl keeps a reference count on
all the values. With the above return, you create two references to the
value in array @x. When @x goes out of scope, the reference count is
decreased by one. Since it's not zero, the values are returned to the
calling sub.


-- 
Don't stop where the ink does.
        Shawn

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to