$^T is not working as expected from mod_perl

P

Patrick Hartman

I was using this to calculate execution time at the bottom of a
script:

print time - $^T;

However I noticed that the time just got a little bit longer everytime
I ran it despite the apparent page load time not changing at all. I
changed it to this:

printf "BEG: $^T \n";
printf "END: ". time;

And the $^T was outputting the same start time for every execution;
every time I would load the page, the time just got longer and longer
since only the end time was updating.

This problem is only happening when I execute from mod_perl / Apache.
If I go to the command line and execute it through there it works
fine. I have Apache on my local computer, so both places are pointing
to the same installation of Perl.

Any ideas what would be causing this?

Thanks,
Patrick
 
P

Patrick Hartman

I was using this to calculate execution time at the bottom of a
script:

print time - $^T;

However I noticed that the time just got a little bit longer everytime
I ran it despite the apparent page load time not changing at all. I
changed it to this:

printf "BEG: $^T \n";
printf "END: ". time;

And the $^T was outputting the same start time for every execution;
every time I would load the page, the time just got longer and longer
since only the end time was updating.

This problem is only happening when I execute from mod_perl / Apache.
If I go to the command line and execute it through there it works
fine. I have Apache on my local computer, so both places are pointing
to the same installation of Perl.

Any ideas what would be causing this?

Thanks,
Patrick

Sorry, I should have searched Google first. I will post the solution I
found and beg for forgiveness :).

http://modperlbook.org/html/6-5-1-T-and-time.html

"Under mod_perl, processes don't quit after serving a single request.
Thus, $^T gets initialized to the server startup time and retains this
value throughout the process's life. Even if you don't use this
variable directly, it's important to know that Perl refers to the
value of $^T internally."

Patrick
 
M

Martijn Lievaart

I was using this to calculate execution time at the bottom of a script:

print time - $^T;

However I noticed that the time just got a little bit longer everytime I
ran it despite the apparent page load time not changing at all. I
changed it to this:

printf "BEG: $^T \n";
printf "END: ". time;

And the $^T was outputting the same start time for every execution;
every time I would load the page, the time just got longer and longer
since only the end time was updating.

This problem is only happening when I execute from mod_perl / Apache. If
I go to the command line and execute it through there it works fine. I
have Apache on my local computer, so both places are pointing to the
same installation of Perl.

Any ideas what would be causing this?

Mod_perl loads the interpreter only once. Just store the start time at
the top of your script and use that instead of ^T.

M4
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,821
Latest member
AleidaSchi

Latest Threads

Top