Link to home
Start Free TrialLog in
Avatar of Simon336697
Simon336697Flag for Australia

asked on

Am @t time array - help in understanding

Hi guys, I have the following little section of a script that im trying to understand.

@t = localtime time;
if ($t[1] >= 0 && $t[1] < 10) {
do this...
etc etc
}

Any help greatly appreciated.
If possible, id appreciate how you could modify this in the context of how it is used.
Thank you guys.
SOLUTION
Avatar of ozo
ozo
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Tintin
Tintin

I suspect there's some badly constructed code in that code block.  Is it checking the minutes to format the time?  If so, then you should be using printf or sprintf for that purpose.
Avatar of Simon336697

ASKER

Hi guys!

Tintin, the comment in the code for this is....

@t = localtime time;                          #once per hour on the hour
if ($t[1] >= 0 && $t[1] < 10) {

This code is part of a subroutine called cleaning()

But I still dont understand what its doing...

I know in the if statment, it does deleting of records in a mysql database..
But im trying to understand how to pull apart the
if ($t[1] >= 0 && $t[1] < 10) {
I'd like to see the rest of the subroutine.

       localtime EXPR
               Converts a time as returned by the time function to a 9-element
               list with the time analyzed for the local time zone.  Typically
               used as follows:

                   #  0    1    2     3     4    5     6     7     8
                   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                               localtime(time);

Therefore, the 2nd element of the array (array index 1) is minutes.

So the if statement reads

if current minutes is greater than or equal to zero and current minutes is less than 10

Thanks Tintin, so the comment is wrong then?
The if statement here runs every 10 minutes?
Would that be correct?
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Really appreciate you Tintin and ozo.
Yes im going through a large amount of perl code that ive taken upon myself to decipher Tintin.
I hope you guys dont mind me posting snippets of this.
Thanks to both of you as always you are great. :>)
You can find out what a function does with
perldoc -f functionname
for example,
perldoc -f localtime
will show
       localtime EXPR
               Converts a time as returned by the time function to a 9-element
               list with the time analyzed for the local time zone.  Typically
               used as follows:

                   #  0    1    2     3     4    5     6     7     8
                   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                               localtime(time);

               All list elements are numeric, and come straight out of the C
               `struct tm'.  $sec, $min, and $hour are the seconds, minutes,
               and hours of the specified time.  $mday is the day of the
               month, and $mon is the month itself, in the range 0..11 with 0
               indicating January and 11 indicating December.  $year is the
               number of years since 1900.  That is, $year is 123 in year
               2023.  $wday is the day of the week, with 0 indicating Sunday
               and 3 indicating Wednesday.  $yday is the day of the year, in
               the range 0..364 (or 0..365 in leap years.)  $isdst is true if
               the specified time occurs during daylight savings time, false
               otherwise.

               Note that the $year element is not simply the last two digits
               of the year.  If you assume it is, then you create
               non-Y2K-compliant programs--and you wouldn't want to do that,
               would you?

               The proper way to get a complete 4-digit year is simply:

                       $year += 1900;

               And to get the last two digits of the year (e.g., '01' in 2001)
               do:

                       $year = sprintf("%02d", $year % 100);

               If EXPR is omitted, "localtime()" uses the current time
               ("localtime(time)").

               In scalar context, "localtime()" returns the ctime(3) value:

                   $now_string = localtime;  # e.g., "Thu Oct 13 04:54:34 1994"

               This scalar value is not locale dependent but is a Perl
               builtin. For GMT instead of local time use the "gmtime"
               builtin. See also the "Time::Local" module (to convert the
               second, minutes, hours, ... back to the integer value returned
               by time()), and the POSIX module's strftime(3) and mktime(3)
               functions.

               To get somewhat similar but locale dependent date strings, set
               up your locale environment variables appropriately (please see
               perllocale) and try for example:

                   use POSIX qw(strftime);
                   $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
                   # or for GMT formatted appropriately for your locale:
                   $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;

               Note that the %a and %b, the short forms of the day of the week
               and the month of the year, may not necessarily be three
               characters wide.



(and since it doesn't make sense for minutes to be negative, the
$t[1] >= 0
part of the code seems rather strange)