We help IT Professionals succeed at work.

Am @t time array - help in understanding

Simon336697
Simon336697 asked
on
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.
Comment
Watch Question

ozo
SILVER EXPERT
Most Valuable Expert 2014
Top Expert 2015
Commented:
if the minutes field of the current time in the local timezone is greater or equal to 0
 and the minutes field of the current time in the local timezone is less than 10
BRONZE EXPERT
Top Expert 2007

Commented:
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.

Author

Commented:
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) {
BRONZE EXPERT
Top Expert 2007

Commented:
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

Author

Commented:
Thanks Tintin, so the comment is wrong then?
The if statement here runs every 10 minutes?
Would that be correct?
BRONZE EXPERT
Top Expert 2007
Commented:
Not sure what you mean by the "if statement runs every 10 minutes".

The if condition will be true when the time is on the hour and up to 9 minutes after the hour.

Have you been left with some code you need to decipher?  Looking at the snippets you've provided so far, they are very poorly written.

Author

Commented:
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. :>)
ozo
SILVER EXPERT
Most Valuable Expert 2014
Top Expert 2015

Commented:
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)

Explore More ContentExplore courses, solutions, and other research materials related to this topic.