in reply to using local and pass by reference method

Don't worry about it? I strongly doubt you'll see any difference. local() is probably more bug-prone, so of the two, I would pass by reference.

By the way, to call a subroutine with no parameters, you usually want to provide empty parentheses: &foo1();. &subname with no parenthesis is a special form of subroutine call that you will rarely need to use, and that may bite you when used inadvertently.