in reply to CLI and problems

Besides the other, more drastic changes, you could simplify your existing algorithm by using an idiom like the following. Replace:

if (! &func1()) { return 0; }
with:
func1() or return 0;

This reduces the lines of code, puts the function call up front where it commands attention, and pushes the error code and return value to a quiet after thought.

Notice that I also dropped the "&" in the function call. (Yes, I remember Perl 4).

Oh, if you want to return if the function returns true, replace "or" with "and" as in:

func2() and return 0;

-- Eric Hammond