use Carp qw(cluck); my $cluck = 0; sub _f_tail_rec { if($_[0] == 0) { cluck "Goto optimized stack trace" if $cluck; return $_[1] } $_[1] *= $_[0]; $_[0]--; goto &_f_tail_rec; } sub f_tail_rec { @_ = (@_, 1); goto &_f_tail_rec;} my $n = 10; print "f_tail_rec($n) = ".f_tail_rec($n),"\n";