Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

use Time::Local; %month = ( "Jan", 0, "Feb", 1, "Mar", 2, "Apr", 3, "May", 4, "Jun", +5, "Jul", 6, "Aug", 7, "Sep", 8, "Oct", 9, "Nov", 10, "Dec", 11 + ); &eTime; sub eTime { my ($x, $y); my ($month, $day, $year, $hour, $min, $sec, $epoch) @y = split(/ /, $x); ($mm1, $day, $year) = split(/\//, $y[0]); ($hour, $min, $sec) = split(/:/, $ss[1]); $moty2 = $month{$moty1}; $day = $day + 0; $hour = $hour + 0; $min = $min + 0; $sec = $sec + 0; $epoch = timelocal($sec, $min, $hour, $day, $mm2, $year); return $epoch; }
  • Comment on How to create a subroutine function to return epoch time from syslog file
  • Download Code

Replies are listed 'Best First'.
Re: How to create a subroutine function to return epoch time from syslog file
by blindluke (Hermit) on Feb 05, 2015 at 08:35 UTC

    Please, use <code> </code> tags around your code.

    It seems that the Parse::Syslog module does what you want and more. Take a look at the timestamp method.

    - Luke

      Thanks for the speedy response Luke. What I'm trying to accomplish is to write a function/subroutine, called eTime() which will return the epoch time which I will then use to compare the interval between an open and closed session. sol@ubuntu01 ~$ fgrep session /var/log/syslog | fgrep open | head -1 Jan 31 08:40:19 ubuntu01 sshd32346: pam_unix(sshd:session): session opened for user rocky by (uid=0) sol@ubuntu01 ~$ fgrep session /var/log/syslog | fgrep closed | head -1 Jan 31 08:52:42 ubuntu01 sshd32523: pam_unix(sshd:session): session closed for user rocky by (uid=0) Building on the code I have, I need to pass the parameters which include month, day, year, hour, min, and second back to the function. I'm new to Perl so my biggest challenge right now is to get the time from the syslog file into the function. Many thanks for the assistance. use Time::Local; %month = ( "Jan", 0, "Feb", 1, "Mar", 2, "Apr", 3, "May", 4, "Jun", 5, "Jul", 6, "Aug", 7, "Sep", 8, "Oct", 9, "Nov", 10, "Dec", 11 ); &eTime; $Interval = <closedSession - openSession> print "Interval = $Interval\n"; sub eTime { my ($x, $ss); # local variables my ($month, $day, $year, $hour, $min, $sec, $epoch); @syslogDate = split(/ /, $x); ($moty1, $day, $year) = split(/\//, $syslogDate[0]); # mm dd yyyy ($hour, $min, $sec) = split(/:/, $syslogDate1); # HH:MM:SS $moty2 = $month{$moty1}; $day = $day + 0; $hour = $hour + 0; $min = $min + 0; $sec = $sec + 0; $epoch = timelocal($sec, $min, $hour, $day, $moty2, $year); return $epoch; }