?
Solved

Am @t time array - help in understanding

Posted on 2008-01-26
8
Medium Priority
?
224 Views
Last Modified: 2012-08-30
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.
0
Comment
Question by:Simon336697
  • 3
  • 3
  • 2
8 Comments
 
LVL 85

Assisted Solution

by:ozo
ozo earned 800 total points
ID: 20751904
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
 
LVL 48

Expert Comment

by:Tintin
ID: 20751921
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
 
LVL 1

Author Comment

by:Simon336697
ID: 20752178
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
[Webinar] Improve your customer journey

A positive customer journey is important in attracting and retaining business. To improve this experience, you can use Google Maps APIs to increase checkout conversions, boost user engagement, and optimize order fulfillment. Learn how in this webinar presented by Dito.

 
LVL 48

Expert Comment

by:Tintin
ID: 20752207
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
 
LVL 1

Author Comment

by:Simon336697
ID: 20752226
Thanks Tintin, so the comment is wrong then?
The if statement here runs every 10 minutes?
Would that be correct?
0
 
LVL 48

Accepted Solution

by:
Tintin earned 1200 total points
ID: 20752245
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
 
LVL 1

Author Comment

by:Simon336697
ID: 20752252
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
 
LVL 85

Expert Comment

by:ozo
ID: 20752726
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

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I've just discovered very important differences between Windows an Unix formats in Perl,at least 5.xx.. MOST IMPORTANT: Use Unix file format while saving Your script. otherwise it will have ^M s or smth likely weird in the EOL, Then DO NOT use m…
Many time we need to work with multiple files all together. If its windows system then we can use some GUI based editor to accomplish our task. But what if you are on putty or have only CLI(Command Line Interface) as an option to  edit your files. I…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Six Sigma Control Plans
Suggested Courses

601 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question