From: Patrick Hartman on
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
From: Patrick Hartman on
On Feb 17, 7:53 pm, Patrick Hartman <patri...(a)gmail.com> wrote:
> 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
From: Martijn Lievaart on
On Wed, 17 Feb 2010 17:53:41 -0800, Patrick Hartman wrote:

> 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