Hi all,

Just want to know what improvement can be done with the code below if any. I
am sure a lot of improvement/changes is required. I will be calling this
script from a UNIX script, i.e.timediff=`timediff.pl $file`, so $file will
be passed to the Perl script. It's probably a good idea to check whether the
$file is passed and if so, check if the file exists or not.

Most of the print lines are just for testing/purposes. Ultimately, what am
wanting to assign to the timediff variable in the UNIX script is the string
"( 5 weeks, 3 days, 10:16:1 )" but only if the file is x days old. Do I need
to have something like a return timediff_detail command in the Perl script?

FYI, I've decided to use stat instead of Perl Date modules because each
server have different Date modules installed, some have Date::Manip, some
have Date::Calc etc. so using stat is the best option that I have.

Any advise/help will be much appreciated. Thanks.


-----
Code for timediff.pl so far
-----

#!/usr/bin/perl

#$today = localtime();
$today_epoch = time();
$today = localtime($today_epoch);
@date_fields = split(" ",$today);
$day=$date_fields[2];
$month=uc($date_fields[1]);
$year=$date_fields[4];

@time_fields = split(":",$date_fields[3]);
$hour=$time_fields[0];
$minute=$time_fields[1];
$second=$time_fields[2];

print "Today is ==> $today \n";
print "DAY is ==> $day ... \n";
print "MONTH is ==> $month ... \n";
print "YEAR is ==> $year ... \n";
print "HOUR is ==> $hour ... \n";
print "MINUTE is ==> $minute ... \n";
print "SECOND is ==> $second ... \n";

my ( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
     $atime, $mtime, $ctime,
     $blksize, $blocks )
= stat("x1.pl");

print "\n";
print "< ====================================== > \n";
print "Output from stat ... \n";
print " dev     => $dev \n";
print " ino     => $ino \n";
print " mode    => $mode \n";
print " nlink   => $nlink \n";
print " uid     => $uid \n";
print " gid     => $gid \n";
print " rdev    => $rdev \n";
print " size    => $size \n";
print " atime   => " . localtime($atime) . " ==> \n";
print " mtime   => " . localtime($mtime) . " ==> \n";
print " mtime - not localtime  => " . $mtime . " ==> \n";
print " ctime   => " . localtime($ctime) . " ==> \n";
print " blksize => $blksize \n";
print " blocks  => $blocks \n";
print "< ====================================== > \n";
print "\n";

$difference=$today_epoch-$mtime;

$seconds    =  $difference % 60;
$difference = ($difference - $seconds) / 60;
$minutes    =  $difference % 60;
$difference = ($difference - $minutes) / 60;
$hours      =  $difference % 24;
$difference = ($difference - $hours)   / 24;
$days       =  $difference % 7;
$weeks      = ($difference - $days)    /  7;

print "Age of x1.pl is: \n";
print "( $weeks weeks, $days days, $hours:$minutes:$seconds ) \n";
print "\n";

exit 0;

--------------
Sample Output:
--------------

Today is ==> Fri Mar 11 02:56:22 2011
DAY is ==> 11 ...
MONTH is ==> MAR ...
YEAR is ==> 2011 ...
HOUR is ==> 02 ...
MINUTE is ==> 56 ...
SECOND is ==> 22 ...

< ====================================== >
Output from stat ...
 dev     => 84148225
 ino     => 7975633
 mode    => 33248
 nlink   => 1
 uid     => 103
 gid     => 101
 rdev    => 0
 size    => 629
 atime   => Fri Mar 11 01:07:26 2011 ==>
 mtime   => Mon Jan 31 16:40:21 2011 ==>
 mtime - not localtime  => 1296445221 ==>
 ctime   => Thu Feb 10 19:09:46 2011 ==>
 blksize => 8192
 blocks  => 8
< ====================================== >

Age of x1.pl is:
( 5 weeks, 3 days, 10:16:1 )

Reply via email to