I'm not sure that a memory hogging recursive function makes for a fair benchmark of function calling speed (even if the tail recursion could be optimized away in another language -- and if the tail recursion could be optimized away, you wouldn't be calling the function anymore, you'd just be doing a goto). I think this version of func_test.pl is more fair (which attempts to test the speed of function calling rather than memory allocation):
#!/usr/bin/perl
#sum of number between 1 and 1,000,000
$n = 1_000_000;
my $t = 0;
$t = addup( $t, $n-- ) while $n;
print "$t\n";
sub addup
{
$_[0] + $_[1];
}
and then the two come out closer:
$ time ./func_tst.pl
500000500000
real 0m5.68s
user 0m5.48s
sys 0m0.02s
$ time ./loop_test.pl
500000500000
real 0m1.48s
user 0m1.47s
sys 0m0.01s