[Melbourne-pm] returning hashes and arrays, source filters considered harmful?
Alfie John
alfiejohn at gmail.com
Thu Feb 18 16:41:11 PST 2010
I know it's a bit evil, but you could probably hook into Perl magic (see
perlguts):
foreach my $person ( $people ) {
...
}
Here, $people is a magic perl variable which checks what context it is being
used in.
However, it's evil so forget I said anything.
Alfie
On Fri, Feb 19, 2010 at 11:27 AM, Toby Corkindale <
toby.corkindale at strategicdata.com.au> wrote:
> On 19/02/10 10:16, Sam Watkins wrote:
>
>> A quick question. Supposing I want to return an array from my_func(), I
>> can do
>> like:
>>
>> ...
>> return @foo;
>> }
>>
>> @foo = my_func();
>>
>> but I normally do it like this because I feel like it should be more
>> efficient:
>>
>> ...
>> return \@foo;
>> }
>>
>> $foo = my_func();
>>
>> This has the unfortunate effect of converting my array to an array ref.
>> If I
>> wanted to reverse that, I think I could use:
>>
>> @foo = @{my_func()};
>>
>> which is getting ugly and inefficient too. The same thing happens when
>> returning hash variables, except that I suppose it is even more
>> inefficient to
>> return it via a list return compared to a reference.
>>
>> My question is, does perl actually optimize this so it sucks less than I
>> am
>> naively supposing it does? Also, is there any way to make like an alias
>> @foo
>> for @$foo, so you can treat an array reference as a normal array without
>> writing @$foo all the time? (and also for hashes)
>>
>
> No, Perl does not optimise it for you, so returning references is
> definitely better for performance.
> There isn't any language syntax for the aliasing you're talking about
> either.
>
>
> These concerns make me reluctant to use normal perl @array and %hash types
>> at
>> all. If I have to pass and return things by reference, and can't alias
>> these
>> back to normal @array and %hash types, I would prefer to use references
>> for
>> everything in order to be consistent and avoid having to rewrite code when
>> I
>> suddenly need to pass some variable to or from a sub. This would make the
>> @foo
>> %bar syntax useless for anything but the one-liners. So I'm hoping there
>> is
>> some workaround or optimization, and a way to alias them.
>>
>
> Luckily there is. Use the Moose. I think Drew mentioned that in the quoted
> but unrelated text I cut from the bottom of this email. Have you
> investigated Moose yet?
>
> Cheers,
> Toby
>
> _______________________________________________
> Melbourne-pm mailing list
> Melbourne-pm at pm.org
> http://mail.pm.org/mailman/listinfo/melbourne-pm
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/melbourne-pm/attachments/20100219/5fead2dd/attachment.html>
More information about the Melbourne-pm
mailing list