in reply to (jcwren) Re: calling a sub from an if statement
in thread calling a sub from an if statement

I don't know what you don't like about using BEGIN, perhaps you could elaborate. As for moving %msg to the top of the file, I specifically avoided that route because there are several problems with it. First, it can be hard to maintain. One little pass through moving things around to try to clean up your code and suddenly you've got a call to the sub before the data is initialized again.

Second, I consider it a bad habit since when you get into more advanced coding, it isn't sufficient. For example, if this becomes a module:

package My::Module; # Keep this next line at the very top, please: %msgs= (400=>"Bad Request",...); [...] use My::OtherModule; [...] sub msg { die "HTTP/1.0 $_[0] $msgs{$_[0]}\n"; }
Then all we need is:
package My::OtherModule; [...] sub import { msg(400) if ! $valid; [....] }
and we run back into the same problem.