warn is certainly not going to leave any more muck on the system than sprinkled print STDERR would, and have the nice additional benefit that warnings can be caught using signal handling if so desired (%SIG{__WARN__}). You might also consider swapping to carp, which can provide more much more useful information on where a syntax error occurred.