Date difference

I tried the below code to find difference between two dates. It works fine if the day of the month is 2-digit number. But it fails when we have a single-digit day of month(ex:1-9). my code is as below. please help me soon.

 #!/usr/bin/perl -w 
  
 use strict; 
 use Time::Local; 
  
 my %months = ( 
   Jan => 1, 
   Feb => 2, 
   Mar => 3, 
   Apr => 4, 
   May => 5, 
   Jun => 6, 
   Jul => 7, 
   Aug => 8, 
   Sep => 9, 
   Oct => 10, 
   Nov => 11, 
   Dec => 12 
 ); 
  
 my $beginning = 'Fri Oct  6 05:54:09 2007'; 
 my $end       = 'Fri Oct  6 06:54:09 2007'; 
  
 my @b = split(/[:\s]/, $beginning); 
 my @e = split(/[:\s]/, $end); 
  
 my $b = timelocal($b[5], $b[4], $b[3], $b[2], $months{$b[1]}-1, $b[-1]); 
 my $e = timelocal($e[5], $e[4], $e[3], $e[2], $months{$e[1]}-1, $e[-1]); 
  
 #my @new = localtime($b); 
 #printf "%04d%02d%02d\n", $new[5]+1900, $new[4]+1, $new[3]; 
  
 my $elapsed = $e - $b; 
 print qq($elapsed seconds elapsed between the two events.\n); 

Thanks in advance

The problem is the split.
Taking a section of your code (in blue), and printing out the arguments to timelocal:

my $beginning = 'Fri Oct  6 05:54:09 2007';
my @b = split(/[:\s]/, $beginning);

$, = ', ';
$\ = "\n";
print $b[5], $b[4], $b[3], $b[2], $months{$b[1]}-1, $b[-1];

You get

54,05,6,,9,2007

Notice the ","?
There are two spaces between "Oct" and "6". You need to change your regex:

my $beginning = 'Fri Oct  6 05:54:09 2007';
my @b = split(/[:\s]+/, $beginning);

$, = ', ';
$\ = "\n";
print $b[5], $b[4], $b[3], $b[2], $months{$b[1]}-1, $b[-1];

Which gives you want you want as arguments to timelocal:

09,54,05,6,9,2007

Ok, to be "more accurate" :), the regex should be /:|\s+/ .

Thanks for reply, but when i execute the whole script same error still exists as below:
Argument "" isn't numeric in integer gt (>) at /usr/lib/perl5/5.8.0/Time/Local.pm line 91.
Day '' out of range 1..31 at line 27

---------- Post updated at 10:18 AM ---------- Previous update was at 10:08 AM ----------

Hey M.D.Ludig thanks for your response.
there are two spaces between month and date.
In above example i explicitly mentioned date but in my script am extracting date from date and last commands, so i have 2 spaces there. I would be thankful if u resolve this problem.
Thanks again in adcvance

---------- Post updated at 10:22 AM ---------- Previous update was at 10:18 AM ----------

hey sorry dude, i had put + inside bracket.
Its working fine now.
Thanks a lot