in reply to Curious Perl Behavior...

Doesn't de-referencing the arrayref @$numbers_ref do an implicit copy (and allocate more space in the process)? I'm not sure.

I imagine a counting loop version would be more space-efficient:
sub sum { my ($numbers_ref) = @_; my $sum = 0; foreach my $i (0 .. $#{ $numbers_ref }) { $sum += $numbers_ref->[$i]; } return $sum; }

Replies are listed 'Best First'.
Re^2: Curious Perl Behavior...
by ack (Deacon) on May 26, 2010 at 15:09 UTC

    Good question...I don't know the answer. The authors apparently didn't think that there is copying going on in the dereferencing since that was essentially the core thesis that they were presenting in that sub-section. I am (or was) assuming that they're pretty tuned in to how Perl's innards work. But then again it wouldn't be the first time that misconceptions even on renouwned authors' expertise were revealed.

    In fact that is the source of my commentary and curiosity...is something going on that the authors didn't quite get right?

    I *do* like you're thinking, though. My only concern would be its generality in the sense that if the array that $numbers_ref refers to contains numbers other than a simple 0 to N then sum() would not work correctly.

    Thank you so much for your ideas and comments. I really appreciate them and you have given me some good ideas.

    ack Albuquerque, NM