Stongly Typed. When we compile the compiler checks all the assignment to make sure they're legal and legit and won't cause problems. Its not an end all but it helps a lot. We also contrain types. For example an integer to between 10 and 20. If the variable ever gets out of this range during run time an exception is thrown and handled by other parts of our code.
I suspect that you are right and that Perl is not the tool for the job you have to do. I'm not going to disagree with that at all. I'm a big fan of using the right tool for the job.
But have you ever had look at Attribute::Types? It's what I'd use to achieve some of what you've specified above.
Attribute::Types allow you to write code like the following:
All of this checking is done at run-time which makes things a little bit harder than other strongly typed languages, but it does give you this functionality if you wish.
Hope this helps,