sub recursive { my( $state, $arg ) = @_; ... if( ( $arg = $state->{ $arg } ) == ... ) { return recursive( $state, $arg ); } else { return 0; } } sub rec_helper{ my $arg = shift; my %state; return recursive( \%state, $arg ); }