Did you try printing the value in $date on line 29? The answer is that some of the values are not what you think, because the following code works fine:
in reply to Re^2: Month '-1' out of range 0..11
in thread Month '-1' out of range 0..11
However, without your actual input file, I'm just guessing. Adding warnings and following the advice in Basic debugging checklist will help you track down the issue. Alternatively, I could help you debug if you posted your input file, wrapped in <code> tags.
my $iso_time = '2014-03-18T15:41:14Z';
my $expected_epoch = 1 * 60 * 60 + 1 * 60 + 1;
my ($date, $time) = split /T/ => $iso_time;
my ($year, $mon, $mday) = split /-/ => $date;
my $currenttime = time; # get current time from system (epoch time)
my $threshold = 900;
$year -= 1900;
$mon -= 1;
my ($hour, $min, $sec) = split /:/ => $time;
my $nsec = chop($sec);
my $mtime = timegm($sec, $min, $hour, $mday, $mon, $year);
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.