Prefixing the subroutine with it's name does not address the issue that the variables are global and therefore useless in making them any more useful for recursion (i.e. they're still useless). The [subroutine-name]_init variable is also useless for recursion. The only way you can do what the OP is suggesting (i.e. recursion when all variables are global) is to implement your own stack for every subroutine that needs to recursively call itself.