Simon336697
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.
@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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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.
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) {
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,$mo n,$year,$w day,$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
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,$mo
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
ASKER
Thanks Tintin, so the comment is wrong then?
The if statement here runs every 10 minutes?
Would that be correct?
The if statement here runs every 10 minutes?
Would that be correct?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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. :>)
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,$mo n,$year,$w day,$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)
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,$mo
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)