| home / programming / perl / mod_perl / chap6 / 1 | [previous][next] |
|
|
It's also important to develop your code with Perl reporting every possible relevant warning. Under mod_perl, you can turn this mode on globally, just like you would by using the -w command-line switch to Perl. Add this directive to httpd.conf:
PerlWarn On
In Perl 5.6.0 and later, you can also enable warnings only for the scope of a file, by adding:
use warnings;
at the top of your code. You can turn them off in the same way
as strict for certain blocks. See the warnings
manpage for more information.
We will talk extensively about warnings in many sections of the
book. Perl code written for mod_perl should run without generating any warnings
with both the strict and warnings
pragmas in effect (that is, with use strict
and PerlWarn On or
use warnings).
Warnings are almost always caused by errors in your code, but on some occasions you may get warnings for totally legitimate code. That's part of why they're warnings and not errors. In the unlikely event that your code really does reveal a spurious warning, it is possible to switch off the warning.
Let's start with some simple code and see what can go wrong with
it. This simple CGI script initializes a variable $counter
to 0 and prints its value to the browser while
incrementing it:
#!/usr/bin/perl -wuse strict;print "Content-type: text/plain\n\n";my $counter = 0;for (1..5) {increment_counter( );}sub increment_counter {$counter++;print "Counter is equal to $counter !\n";}
When issuing a request to /perl/counter.pl or a similar script, we would expect to see the following output:
Counter is equal to 1 !Counter is equal to 2 !Counter is equal to 3 !Counter is equal to 4 !Counter is equal to 5 !
And in fact that's what we see when we execute this script for the first time. But let's reload it a few times.... After a few reloads, the counter suddenly stops counting from 1. As we continue to reload, we see that it keeps on growing, but not steadily, starting almost randomly at 10, 10, 10, 15, 20..., which makes no sense at all!
Counter is equal to 6 !Counter is equal to 7 !Counter is equal to 8 !Counter is equal to 9 !Counter is equal to 10 !
We saw two anomalies in this very simple script:
The reason for this strange behavior is that although $counter
is incremented with each request, it is never reset to 0, even though we have
this line:
my $counter = 0;
Doesn't this work under mod_perl?
| home / programming / perl / mod_perl / chap6 / 1 | [previous][next] |
Created: March 27, 2003
Revised: July 23, 2003
URL: http://webreference.com/programming/perl/mod_perl/chap6/1