in reply to subroutine calls itself

Your subroutines are said to be reentrant and (more specifically) recursive.

How does Perl handle this?

With ease.

I'm just wondering about the performance issues.

None. The first time a subroutine is called at a level of recursion it's never been before, there will be a tiny overhead as a new set of lexicals are created. These will be reused in future calls.

my $c; my %s; sub foo { my ($x) = @_;; $c++; $s{\$x}++; foo($x-1) if $x; } for (1..1000) { foo(int(rand(6))+1); } print("foo() was called $c times, but only ", scalar(keys(%s)), " sets + of lexicals were created.\n");
foo() was called 4531 times, but only 7 sets of lexicals were created.

Replies are listed 'Best First'.
Re^2: subroutine calls itself
by Fletch (Bishop) on Jan 09, 2009 at 15:09 UTC

    Well they're definitely recursive, but for his sake one hopes they're reentrant . . . :)

    (Reentrancy is a desirable property to aim for but it's not a given just because one recurses </nit>)

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.

Re^2: subroutine calls itself
by tux402 (Acolyte) on Jan 09, 2009 at 16:17 UTC
    Thats good to know. I was just hoping that my program wouldn't suck up all the resources on my server. Thanks!

      I just wanted to clarify something. When I said there's no performance issue, I meant compared to calling the same number of non-recursive subs. Calling subs in general is an expensive operation in Perl, but that's not related to whether the sub is recursive or not.

      So if you have no qualms with calling a sub seven times, you should have no qualms about calling a sub that recurses six times instead.