You might want to consider exceptions (throw(), try{}, catch{} blocks et al) - have a look at one of the many exception related modules - we're in the process of adopting a combination of Exception::Class & Error.
A user level that continues to overstate my experience :-))