in reply to detecting an undefined variable

Using an non-existant variable is a fatal compilation error under strict (which one should always use). This smells of using a variable as a variable name, which is generally considered a bad practice... why would you want to do this, what do you need this for?

Normally, the solution to this kind of thing would be to use a hash instead, where the defined and exists checks apply (with the differences explained in their documentation).