项目时间比较紧急,不会perl,恳请个位高手解释一段程序!

moyan311 2003-10-16 10:46:42
#!/usr/bin/perl

$WMC_SYSTEM_NAME = $ARGV[0];

$old_file_name = "";
$curr_file_name = "";

while( true ) {
$now = time(); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($now);
$curr_file_name = "/u06/wmc/systems.old/".$WMC_SYSTEM_NAME."/0110".sprintf("%02d",$mday).".log";
if( $old_file_name eq $curr_file_name ) {
sleep(60);
}
else {
open( LOG_FILE, $curr_file_name );

while( $line=<LOG_FILE> ) {
last if( $line =~ /\xBE/ ); # SOH: Start of header
}

do {
$index = index( $line, "\xBE" );
if( $index>0 ) {
print substr( $line, 0, $index );
print "\n";
}
$mediation_time = hex(substr( $line, $index+1, 8 ));
($m_sec,$m_min,$m_hour,$m_mday,$m_mon,$m_year,$m_wday,$m_yday) = localtime($mediation_time);

# Wait until the alarm occurs
$now = time();
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($now);
$def_sec = ($m_hour-$hour)*3600+($m_min-$min)*60+($m_sec-$sec);
if( $def_sec>0 ) {
sleep( $def_sec );
}

while( true ) {
$line = <LOG_FILE>;
last if( $line =~ /\xBE/ ); # Next SOH
last if( eof(LOG_FILE) );
chop( $line );
print $line."\n";

# See if now is already another day.
$now = time(); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($now);
$new_file_name = "/u06/wmc/systems.old/".$WMC_SYSTEM_NAME."/0110".sprintf("%02d",$mday).".log";
last if not ( $new_file_name eq $curr_file_name );
}
# See if now is already another day.
$now = time(); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($now);
$new_file_name = "/u06/wmc/systems.old/".$WMC_SYSTEM_NAME."/0110".sprintf("%02d",$mday).".log";
last if not( $new_file_name eq $curr_file_name );

} while( !eof(LOG_FILE) );

close( LOG_FILE );
$old_file_name = $curr_file_name;
}
}
我只知道这段程序是按照日期读取log文件,问题是他是怎么读的?是一次全部读取还是怎么样的,中间的def_sec是什么意思呢(在程序中)
...全文
46 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pangyunqing 2003-10-22
  • 打赏
  • 举报
回复
程序是一次性把日志数据读入的,然后根据每行里相应的数据进行分解赋值给每个变量
$mediation_time = hex(substr( $line, $index+1, 8 ));
($m_sec,$m_min,$m_hour,$m_mday,$m_mon,$m_year,$m_wday,$m_yday) = localtime($mediation_time);
就是这两句。
$now = time();
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($now);
$def_sec = ($m_hour-$hour)*3600+($m_min-$min)*60+($m_sec-$sec);
这三句是取得程序运行时的时间,然后与日志文件中的每行的时间进行相减,取得两个时间的时间差,以秒为单位。
zgia 2003-10-19
  • 打赏
  • 举报
回复
好像是根据置顶的日期,一次性的读入,并打印出
$def_sec是暂停的持续时间,至于为啥要暂停,就是你们程序的需要了。
fancyhsq 2003-10-19
  • 打赏
  • 举报
回复
哎。太长了,。。
cells 2003-10-16
  • 打赏
  • 举报
回复
你把这个程序读取的数据文件贴过来,结果就一目了然了.
klbt 2003-10-16
  • 打赏
  • 举报
回复
超长问题,帮你up
LXGer 2003-10-16
  • 打赏
  • 举报
回复
up

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧