in reply to Crypt::CBC and error trapping

use English '-no_match_vars';

and then later in place of @$ use $EVAL_ERROR.

It so happens that you've mistyped a punctuation variable, but rather than just retype it I'm suggesting use English.