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.
LVL 1
Simon336697Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

ozoCommented:
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
0
TintinCommented:
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.
0
Simon336697Author 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) {
0
Cloud Class® Course: Microsoft Exchange Server

The MCTS: Microsoft Exchange Server 2010 certification validates your skills in supporting the maintenance and administration of the Exchange servers in an enterprise environment. Learn everything you need to know with this course.

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

0
Simon336697Author Commented:
Thanks Tintin, so the comment is wrong then?
The if statement here runs every 10 minutes?
Would that be correct?
0
TintinCommented:
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.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Simon336697Author 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. :>)
0
ozoCommented:
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)
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Perl

From novice to tech pro — start learning today.