I think that this hack is ugly. Not only in that it is
unaesthetic, but in this elementary error lies a good lesson
that you would deprive people of. Getting around
misunderstandings with magic tricks both keeps people from
learning how things
really work, but also makes it
harder for them to later on figure out what you did.
But look at perlsub for the section on overriding built-in
global functions. (You can do this per package or for all
packages at once.)
Alternately you can look at perltie and create yourself
a tied filehandle that you select before calling their
code.
Personally rather than making this work as they want, I
would select a tied filehandle that would take print's
and cough and die with an informative error. Then people
could still print to STDERR for debugging output.