Jim Gibson <jimsgib...@gmail.com> writes:

> On Sep 8, 2014, at 3:13 PM, lee wrote:
>
>> Shawn H Corey <shawnhco...@gmail.com> writes:
>> 
>>> On Mon, 18 Aug 2014 16:17:53 +0800
>>> # or
>>> 
>>> sub myfunc {
>>>  return [ 1, 2, 3 ];
>>> }
>> 
>> Is there a difference to
>> 
>> sub myfunc {
>>  return ( 1, 2, 3 );
>> }
>
> The first example returns [ 1, 2, 3 ], which is a reference to a list with 3 
> elements. References are scalars.
>
> The second example returns ( 1, 2, 3 ), which is a list with 3 elements.
>
> So, yes, there is a difference.

Hm, so what way of thinking is behind this, and how do you declare an
array?


my $i = 1;
my $f = 2.5;
my $s = 'string';
my $list = (1, 2, 3);
my $list_reference = [(1, 2, 3)];
my $dereferenced_list = $@list_reference;
my @artificial_array = $@list_reference;
my @true_array = ?


I'm finding this very confusing.  What's the benefit of using extra
designators for some types of variables (arrays) while not even having
any at all for some others (lists)?

>> ?  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?
>
> Perl will not garbage-collect an element if there is a reference to
> it. So while the array name @x no longer is in scope once the
> subroutine has returned, the list that was the value of @x still
> exists in memory, and the reference returned by the subroutine will be
> valid.
>
> If the reference is not saved or copied, then the list will eventually get 
> garbage collected.

Hmm, ok, strange ... good to know, though.


-- 
Knowledge is volatile and fluid.  Software is power.

-- 
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