http://qs321.pair.com?node_id=933120


in reply to Deep recursion problem

If you want to do this kind of recursion, avoiding all the copying will make things faster.

Note that I am too lazy to even try a comparison using Benchmark to prove what I say. So I could be deluding myself here.

This code should be a fair bit faster than yours:

sub size_of_an_array { return 0 unless @_; pop; return 1 + &size_of_an_array; }

The reason for the putative speed boost is that it avoids making any copies of the array under consideration.

Check out perlsub for the meaning of &sub_name;.

If you care to benchmark, you might find that shift works even faster than pop. It is a very frequent operation on @_, so I wouldn't be surprised if there are clever optimizations there.

You also might find that I'm full of it. Surprising things can happen. That's why you should always benchmark and profile code when you try to optimize it. That way you can be sure you are making effective optimizations on the right parts of the code.


TGI says moo