in reply to Checking Submitted Form Data

I think you should call your subs as: PrintError() and CARRAY_ON_PROCESSING_FORM() As the &sub way to call a sub passes @_ as arguments and disables prototype checking, as described in perlsub. Also, I would pass @errormsg to PrintError as arguments. PrintError(@errormsg) And then in PrintError:  foreach(@_){}