If you don't require millisecond resolution, you can just do this:
print OUT scalar localtime,"\n";
But that only provides 'to the second' resolution. The nice thing is that it is preformatted in a well-recognized fashion.
If you require millisecond resolution you may use the Time::HiRes module. Specifically, with the time() function of that module you can obtain the time of day in floating point seconds since epoch. You'll then have to run it through the localtime function, and insert back into the 'localtime' time stamp the decimal portion to convert the output of time() to a human understandable format.
Time::HiRes relies on certain functions being available in your systems OS. If they're not there, it will fail.
UPDATE: Here is an example using Time::HiRes
use Time::HiRes qw( time );
open OUT, ">>timelog" or die "Can't open time log.\n$!";
my $hightime = time;
my $timestamp = localtime $hightime;
my $msec = substr $hightime - int $hightime, 1;
$timestamp =~ s/(:\d+)\s/$1$msec /;
print OUT $timestamp, "\n";
This snippet doesn't implement file locking. I presume that you've already got that part figured out. The snippet works as follows:
- First, startup the Time::HiRes module and import the module's version of the time() function, as a drop-in replacement for Perl's standard time() function.
- Open the file.
- Grab the current time with tons of accuracy.
- Turn the current time into a familiar timestamp, but with only whole seconds, not decimal seconds.
- Extract the decimal portion of the string, and trim off the leading zero.
- Insert the decimal portion (including decimal point) into the appropriate part of $timestamp.
- Print the timestamp to OUT.
- Close OUT.
"If I had my life to do over again, I'd be a plumber." -- Albert Einstein