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(@_){}