0

我们定制了监控 Perl 脚本,当它的格式为“Wed May 29 23:55:19 2013”​​时,从 oracle 警报日志文件中提取计时数据来监控警报日志。但是对于 Oracle 10.2.0.5 数据库,oracle 还会在警报日志文件中写入时区信息以及诸如“Thu May 30 01:30:43 ADT 2013”​​之类的日期。

我们使用下面的脚本来获取 yyyymmddhhmmss 中的时间戳。但是,当 alertlog 文件具有带时区的日期格式时,相同的脚本会失败。

sub make_timestamp
{
    my ($day_name,$month_name,$day,$time_stamp,$year,$timestamp);
chomp @_[0];
($day_name,$month_name,$day,$time_stamp,$year) = split (/ +/,@_[0]);
($hour,$min,$sec) = split(/:/,$time_stamp);
## $day = $padded_number{$day} if ($day < 10);
$timestamp = $year . $month{$month_name} . $day . $hour . $min . $sec;
return $timestamp;
}

你能帮我修复这个代码吗?

4

1 回答 1

0

尝试这个

sub make_timestamp
{
 chomp $_[0];
  my ($day_name,$month_name,$day,$time_stamp,$timezone,$year) = split (/ +/,$_[0]);
  $time_stamp =~ s/://g;
  ## $day = $padded_number{$day} if ($day < 10);
  my $timestamp = $year . $month{$month_name} . $day . $time_stamp;
  return $timestamp;
}

我稍微剪了一下。使用$_[0]而不是@_[0]. 变量的声明和定义也可以放在一行中。我会删除$timestamp变量并立即返回组合值。

无论如何,我建议您添加use strict; use warnings;到脚本的开头。它有助于减少可能的错误。

于 2013-05-30T10:41:17.387 回答