jaker has asked for the wisdom of the Perl Monks concerning the following question:

Hello, sages.

I've written a script that works on my local machine but not on the webserver. I narrowed the problem down to one particular line, and for simplicity's sake, I've cut out all of the script except what's necessary to reproduce the error:

#!/usr/local/bin/perl print "Content-type: text/html\n\n"; use LWP::Simple; use LWP::UserAgent; #use HTML::TreeBuilder; #uncommenting this line breaks the script print "Hello, world."

When I uncomment the third use line (as shown above), I get a 500 error, and checking the server's logs yields this:

[Fri Aug 22 13:30:23 2008] [error] [client x.x.x.x] Premature end of s +cript headers: /home/jaker/public_html/scgi-bin/rhyme.pl

Why might this be happening? With the line commented out, the script runs fine. Am I correct in suspecting that it's because TreeBuilder is not installed on the server? I attempted to place TreeBuilder.pm in my home directory and added a "use lib" line to my script, but I got the same result. The script's permissions are set correctly.

Thank you all very much.
Jake

Replies are listed 'Best First'.
Re: using HTML::TreeBuilder causes "premature end" error
by mr_mischief (Monsignor) on Aug 22, 2008 at 20:10 UTC
    You're almost certainly right about the problem. It's very likely that HTML::TreeBuilder is not installed on the server is causing the issue because that's one thing that would cause this. It's possible there's some issue with the way it's installed or it being corrupted, too.

    The suggestion to use CGI::Carp qw( fatalsToBrowser ); should help you get an error message. There might also be something in the logs.

    You can also, when in doubt, wrap a require() in an eval and then do any importing. This allows you to trap the failure specifically and do custom reporting or even try a different module.

    Another way to approach this, which is generally less helpful for debugging but could help in this case, is to look in your hosting support documentation to see which modules are installed. Most hosting accounts with paid hosting services have this, or your company's internal hosting group should be able to tell you.

Re: using HTML::TreeBuilder causes "premature end" error
by bkiahg (Pilgrim) on Aug 22, 2008 at 19:57 UTC
    Try adding use CGI::Carp qw[fatalsToBrowser]; above the commented line to see if it adds any additional knowledge to your problem.
Re: using HTML::TreeBuilder causes "premature end" error
by jaker (Initiate) on Aug 22, 2008 at 21:03 UTC

    Excellent! I added the suggested line and got a message about how Element.pm couldn't be found in the include path. The library wasn't installed on the server, and the reason my quick hack (uploading TreeBuilder.pm to my home directory) didn't work is that it's dependent upon the rest of the library. Of course...

    I didn't know fatalsToBrowser existed, but it's ever-so-convenient.

    My script works now. Thanks to both of you.

    Jake