perl中对系统脚本调用的问题

要求实现功能:
1.调用脚本parasedate.sh 对如文件进行解析,文件格式如:“PM_200901091100-200901091200.10.xml”
“PM_200901091100-200901091200.86.xml”
2.只对后缀名为“.10.xml”的文件进行解析

写了程序如下:

#!/usr/local/bin/perl
use Time::ParseDate;
use File:Dumper;

local ($path,$file,$timestamp);
local (@file,$starttime,$reportnum);

$path = "/home3/pmlog";
$timestamp = "time2str("%Y-%m-%d %H:00:00",parsedate("today") - 3600)";

opendir(DIR, $path) || die "can't opendir $some_dir: $!";
@files = readdir(DIR);
#print Dumper(@files); //OK,能成功打开文件夹读取文件
closedir DIR;

#调用分析程序 /匹配PM_200901161600-200901161700_10.xml/

for (my $i=0;$i<@file;$i++){
if ($file[$i]=~/.\_([A-Za-z0-9]+)-[A-Za-z0-9]+_(\d+).\w+$/)
//匹配文件夹下符合文件格式的所有文件
{
#print "$file[$i]\n" ; //不能成功匹配??
$starttime=$1;
$reportnum=$2;
if($startime=$timestamp){
//判断开始时间是否所取的时间值(当前时间往前一小时取整)
while ($reportnum=10){
//当报告号为10时,进行系统调用
#print "$file[$i];\n"

system (cd $path);
system (pmfileparser $file[$i]);
}
}
}
}

请高手来帮看看程序:
1.循环结构有没有问题??
2.正则匹配是否正确???

哈哈,又是你啊~~~
1. 循环结构没问题,但是就象我上次说的那样,
for (my $i=0;$i<@file;$i++)带有c的风格,perl的执行效率不高。建议用
foreach $file_name (@file)

2. 正则有问题,首先有个基本问题要搞清。"_"下划线是不需要转义的,所以不需要\,"."在匹配点号时需要转义,当然.号也算是一个非分隔字符,也能被匹配,只是那样做不是很好。
我的正则: $file_name =~ /.+_(\d)+-(\d)+\.(\d)+\.\w+/
前提是文件名只是诸如:PM_200901091100-200901091200.86.xml这种包含数字字母的文件名。
温馨提示:答案为网友推荐,仅供参考
相似回答