Is calling a function only twice a good use of recursion? Is this, technically, a recursive function? It only gets called once by itself, but it cleaned up my code quite a bit, I think.  Or, does it needlessly complicate the code?

sub check_backlog {
    my $topic        = shift;
    my $prev_backlog = shift;
    my $backlog      = undef;
    my @status = `$CMD -topicstat $topic`;
    foreach (@status) {
        if (/Message count: (\d+)/) {
            $backlog = $LAST_PAREN_MATCH;
            if ( !$prev_backlog &amp;&amp; $backlog &gt; 1 ) {
                sleep $topic_wait_time;
                check_backlog( $topic, $backlog );
            }
            elsif ( $backlog &gt; $prev_backlog ) {
                check_over_thresholds($backlog);
            }
        }
    }
    return $backlog;
}
Yes, every function which calls itself is considered a recursive function.

Recursion is really useful when traversing trees and such.

As I don't fully understand Perl, I can't really tell whether this case is proper use of recursion, perhaps also provide the intent of your code.

UPDATE

If you simply want to see whether data is passing (or not passing) through a queue, I wouldn't find recursion to be a suitable implemention.

I would expect a function which returns either true or false after a given amount of time, or immediately when data is passing through.

Consider the following pseudo code:

function isDataPassing( queue, time )
{
   headOfQueue = queue.peek();
   dataPassing = false;
   while ( timePassed &lt; time )
   {
       if ( headOfQueue != queue.peek() )
       {
           dataPassing = true;
           break;
       }
   }

   return dataPassing;
}


I can't help you with how you would go about implementing this in Perl. StackOverflow is a better location to ask such a question.