文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Perl使用心得:2005到2006年引发的程序问题

Perl使用心得:2005到2006年引发的程序问题

时间:2006-03-01  来源:xiaoquqi

今天忽然发现kpi的告警程序运行起来超级慢,经过仔细分析发现是由于时间问题导致的。 unix平台下,ls -lrt命令只能显示出月、日,小时:分钟,对于过早的文件才会在日期处显示成年,以前的程序忽略了跨年显示的情况,导致程序把去年的文件也当作符合时间点的文件进行分析了,从而影响了程序的效率。 新程序的思路如下: 将ls -lrt返回的文件列表进行分析,把月、日、小时:分钟,再定义一个存放文件年的变量,分别放在单独的一个变量里,然后取出系统当前时间,与月进行比较后如果发现文件的月大于当前系统时间的月,那么文件的年的变量就应该为系统年-1。程序部分代码如下: sub anaylze_file_list
{
    my $doorDate=shift;
    my ($lscmd,$fhd,$fileMon,$fileDay,$fileTime,$fileName,$filelist,$fileDate,$fileYear);
    my (@lscmd,@filename);
    $lscmd="ls -lrt ".%config->{"LogPath"}."|awk '{print \$6\" \"\$7\" \"\$8\" \"\$9}'";
    @lscmd=`$lscmd`;
    if(@lscmd==0){print("No Pattern File");exit 0;}
    foreach $fhd (@lscmd){
        chomp($fhd);
        @filename=split(/\s+/,$fhd);
        #Month of File
        $fileMon=$filename[0];
        $fileMon = $namemonth{$fileMon};
        $fileMon = sprintf("%0.2d",$fileMon);
        #Day of File
        $fileDay=$filename[1];
        $fileDay = sprintf ("%0.2d",$fileDay);
        #Time of file
        $fileTime=$filename[2];
        #Name of File
        $fileName=$filename[3];
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
        if($fileTime=~/^(\d\d\d\d)$/){
            $fileDate=$1.$fileMon.$fileDay."000000";
        }else{
            $fileTime=~s/\://g;
            $mon = sprintf("%0.2d",$mon+1);
            if($mon<$fileMon){$fileYear=$year+1900-1;}else{$fileYear=$year+1900;}
            $fileDate=$fileYear.$fileMon.$fileDay.$fileTime."00";
        }
        if($fileDate<$doorDate){next;}
        if($filelist eq ''){
              $filelist=$fileName;
        }else{
              $filelist=$filelist.",".$fileName;
        }
    }
    return $filelist;
}
相关阅读 更多 +
排行榜 更多 +
毒药轮盘手机版下载

毒药轮盘手机版下载

休闲益智 下载
剑侠情缘零b服手游下载

剑侠情缘零b服手游下载

角色扮演 下载
惊魂动物园游戏手机版下载

惊魂动物园游戏手机版下载

冒险解谜 下载