in reply to Re (tilly) 1: overloading the print function (or alternatives)
in thread overloading the print function (or alternatives)

How about overloading it in a more informative way? Perhaps you could overload print() with something like this (untested):

sub print { my $string = join '', @_; if ($string =~ /^(Content-type:)/) { CORE::print $string; } else { CORE::print "Content-type: text/html\n\n"; die "You used print() rather than returning a string, you naughty +person"; } }
Something I DON'T know, however... would one need to prototype this overloaded print() to assure that it would work when used without parenthases, or is that taken care of becuase the built-in print() is already prototyped? You'd probably want to be sure beore doing it this way.

Alan "Hot Pastrami" Bellows
  • Comment on Re: Re (tilly) 1: overloading the print function (or alternatives)
  • Download Code

Replies are listed 'Best First'.
Re (tilly) 3: overloading the print function (or alternatives)
by tilly (Archbishop) on Dec 04, 2000 at 23:57 UTC
    Then you would mess up someone who had inserted:
    print STDERR "Called node 'foo'\n";
    as a debugging aid. (The messsage should show up in your webserver's logs.) The following (untested) code is much nicer:
    package noprint; use Carp; sub PRINT { my $msg = Carp::longmess("You must return rather than print"); print "Content-type: text/plain\n\n$msg"; die $msg; } *PRINTF = *PRINT; sub TIEHANDLE { return bless ({}, shift); }
    and elsewhere in the code:
    tie(*NOPRINT, 'noprint'); select(NOPRINT); # time passes while the page is built. # Before spitting out the final page: select(STDOUT);
    That catches the newbie error. Without the potential for headaches that overriding print causes.