setup() is, as far as the MIC coder is concerned, called as the first step in any page evaluation (see 3.1). setup() is meant to initialize certain variables, and or perform security checks and such.
If setup returns some value, then this will stop the page which would have been processed/displayed from doing so. Instead, the return value of setup will be treated as what should be proccessed and output. If there is no return value, then the program will proceed normally.
Thus, perhaps there is a page 'session_lost.html' which is meant to deal with the fact that a customers session has been lost or corrupted. We check for this fact in setup with something like:
... if (session_lost()) { return Pile::my_pile::session_lost(); } ...
If session_lost() is true, whatever page was requested will not be proccessed or displayed; instead, session_lost() will be. For this reason, be sure and return undef or an empty list at the end of the setup routine. By the rules of perl, simply ending the routine could cause erroneous misdirection.