在Perl中,我的脚本的开始时间总是一样的

在Perl中,我的脚本的开始时间总是一样的,perl,Perl,我制作了一个脚本来提取日志文件的内容,并在任务完成时计算时间差 假设我有四个作业,每个作业有三个单独的任务,到目前为止,我需要每个任务的开始,然后打印出来 一切都很好,除了我尝试使用$j,$l作为二维数组进行初始化以使其更方便外 问题在于,在输出端,我得到的每个作业的“起始点”都是相同的 $counter和$l的值应该是根本原因 有人能帮忙吗?我尽了最大努力,还是个新手 sub getdate { my $line = $_[0]; ($hrs, $min) = split('

我制作了一个脚本来提取日志文件的内容,并在任务完成时计算时间差

假设我有四个作业,每个作业有三个单独的任务,到目前为止,我需要每个任务的开始,然后打印出来

一切都很好,除了我尝试使用
$j
$l
作为二维数组进行初始化以使其更方便外

问题在于,在输出端,我得到的每个作业的“起始点”都是相同的

$counter
$l
的值应该是根本原因

有人能帮忙吗?我尽了最大努力,还是个新手

sub getdate {
    my $line = $_[0];

    ($hrs, $min) = split(':', $line, 3);
    return $hrs, $min;
}

print FILE "<html><head>\n";
print FILE "<title>CGI Test</title>\n";
print FILE "</head>\n";
print FILE "<body>";
print FILE "<font size=\"5\" color=\"#008080\" face=\"Tahoma\"><b><u><br>";
print FILE "PBI Batch for 22/02/2013";
print FILE "</font></b></u><br><br><br>";

my $i = 0;
my $j = 0;
my $l = 0;

my @sample;

#print FILE "<h4>";

foreach $header (<COLLECTION>) {
    chomp($header);
    ($heading, $filepath) = split(',', $header);

    #$two[$i]="<font size=\"3\"color=\"#008000\" face=\"Tahoma\"><b><u><br>";
    #$two[$i]="<font size=\"3\" color=".$color." face=\"Tahoma\"><b><u><br>";
    $two[$i] .= $heading;

    #$two[$i] .= "</font></u></b><br>";
    #print FILE "<font size=\"3\" color=\"#008000\" face=\"Tahoma\"><b><u><br>";
    #       print FILE $two[$i];
    #print FILE $heading;
    #print FILE "</font></u></b><br>";

    #print $filepath."\n";
    open(MYFILE1, $filepath) or die 'Could nont openfile';

    my $counter;
    foreach $list (<MYFILE1>) {

        chomp($list);
        ($file, $path) = split(',', $list);

        #print FILE $file;
        my @secondstart;
        my @secondend;
        my $secondcounter = 0;

        #print FILE "valueofllllllllllllllllllllllllllll".$l;
        foreach $counter ($file) {
            print FILE "valueofllllllllllllllllllllllllllll" . $l;
            $l++;
            $sample[$j][$l] = $counter;
            print FILE "secCOUNTER  " . $secondcounter;
            $secondcounter++;
        }

        print FILE "                                space";

        open(MYFILE, $path) or die 'ERRROR';
        my $count = 0;
        foreach $line (<MYFILE>) {

            my @endtime;

            $flag = 'false';

            #$counter++;
            $count++;
            print FILE $count . "========";

            if ($count == 1) {
                ($hrs, $min) = getdate($line);
                $starttime[$j][$l] = ($hrs * 60) + $min;
            }
            else {
                ($hrs, $min) = split(':', $line, 3);
                if ($line =~ m/End of Procedure/) {
                    $flag            = 'true';
                    $endtime[$j][$l] = $hrs . $min;
                    $endtime[$j][$l] = ($hrs * 60) + $min;
                }
                else {
                    $endtime[$j][$l] = ($hrs * 60) + $min;
                }
            }

            $duration[$j][$l] = $endtime[$j][$l] - $starttime[$j][$l];

        }

        #   print $flag;

        #print FILE $file." : ";
        #print FILE "value of ".$j."and".$l;
        $startstatus[$j][$l]    = "Started at" . $starttime[$j][$l];
        $durationstatus[$j][$l] = "&nbspDuration is " . $duration[$j][$l] . "m";

        # print FILE "Started at".$starttime;
        # print FILE "&nbspDuration is ".$duration."m";

        #                 print FILE "<br>";

        close(MYFILE);

    }

    my $valueofl = $l;

    #print FILE "vlaeeofl".$valueofl;
    print "valueofllllllllllllllllllllllllllll" . $l;
    $l = 0;

    if ($flag eq 'true') {
        $status = 'Completed';
        $color  = '#008000';

        print FILE "<font size=\"3\" color=" 
            . $color
            . " face=\"Tahoma\"><b><u><br>"
            . $two[$i]
            . "</font></u></b><br>";
        print FILE $status . "<br>";

        while ($l <= $valueofl) {

            #print $j."and".$l;
            #   print "valueofllllllllllllllllllllllllllll".$l;

            print FILE $sample[$j][$l] . "&nbsp&nbsp&nbsp&nbsp";
            print FILE $startstatus[$j][$l] . "&nbsp&nbsp&nbsp&nbsp";
            print FILE $durationstatus[$j][$l] . "<br>";
            $l++;
        }

        # print FILE $startstatus[$j][0];
        # print FILE $durationstatus[$j][0];
    }
    else {
        #print "valueofllllllllllllllllllllllllllll".$l;
        #print $j."and".$l;
        $status = 'In Progress';
        $color  = 'blue';
        print FILE "<font size=\"3\" color=" 
            . $color
            . " face=\"Tahoma\"><b><u><br>"
            . $two[$i]
            . "</font></u></b><br>"
            . $status;
    }
    $i++;
    $j++;

}

print FILE "</body>";
print FILE "</html>";

close(FILE);
close(MYFILE1)
sub-getdate{
我的$line=$\u0];
($hrs,$min)=拆分(“:”,$line,3);
返回$hrs,$min;
}
打印文件“\n”;
打印文件“CGI测试\n”;
打印文件“\n”;
打印文件“”;
打印文件“
”; 打印文件“2013年2月22日PBI批次”; 打印文件“


”; 我的$i=0; 我的$j=0; 我的$l=0; 我的@样本; #打印文件“”; foreach$header(){ chomp($header); ($heading,$filepath)=拆分(',',$header); #$two[$i]=“
”; #$two[$i]=“
”; $two[$i]。=$heading; #$two[$i]。=“
”; #打印文件“
”; #打印文件$two[$i]; #打印文件$heading; #打印文件“
”; #打印$filepath。“\n”; 打开(MYFILE1,$filepath)或死“可以不使用openfile”; 我的美元柜台; foreach$list(){ chomp($list); ($file,$path)=拆分(',',$list); #打印文件$FILE; 我的@secondstart; 我的@secondend; 我的$secondcounter=0; #打印文件“valueofllllllllllll”。$l; foreach$计数器($文件){ 打印文件“valueofllllllllllll”。$l; $l++; $sample[$j][$l]=$counter; 打印文件“secCOUNTER”。$secondcounter; $secondcounter++; } 打印文件“空间”; 打开(MYFILE,$path)或死“error”; 我的$count=0; foreach$行(){ 我的@endtime; $flag='false'; #$counter++; $count++; 打印文件$count。“=============”; 如果($count==1){ ($hrs,$min)=获取日期($line); $starttime[$j][$l]=($hrs*60)+$min; } 否则{ ($hrs,$min)=拆分(“:”,$line,3); 如果($line=~m/过程结束/){ $flag='true'; $endtime[$j][$l]=$hrs.$min; $endtime[$j][$l]=($hrs*60)+$min; } 否则{ $endtime[$j][$l]=($hrs*60)+$min; } } $duration[$j][$l]=$endtime[$j][$l]-$starttime[$j][$l]; } #打印$flag; #打印文件$FILE。“:”; #打印文件“..j.”和“..l”的值; $startstatus[$j][$l]=“开始于”$starttime[$j][$l]; $durationstatus[$j][$l]=“ 持续时间为“$duration[$j][$l].”m”; #打印文件“开始于”。$starttime; #打印文件“ Duration为“$duration.”m”; #打印文件“
”; 关闭(MYFILE); } my$valueofl=$l; #打印文件“vlaeeofl”。$valueofl; 打印“valueoflllllllllllllllllllllllllllllll”。$l; $l=0; 如果($flag eq'true'){ $status='已完成'; $color='008000'; 打印文件“
” .$2[$i] .“
”; 打印文件$status。“
”;
虽然($l这是一段令人震惊的Perl代码。您必须始终使用
使用严格的
使用警告
,并使用
my
声明所有变量,使其尽可能接近其第一个使用点。这是最基本的调试形式,在询问其他人之前至少这样做是礼貌的我需要帮助

问题可能出在您的
for
语句中

foreach $counter ($file) { ... }

它将只执行一次循环体,并将
$content
设置为
$file
的值。我无法想象您的意图是什么。

这是一段令人震惊的Perl代码。您必须始终使用
使用strict
使用warnings
启动程序,并将所有变量声明为尽可能接近ir使用
my
的第一个使用点。这是最基本的调试形式,在请求他人帮助之前,至少这样做是礼貌的

问题可能出在您的
for
语句中

foreach $counter ($file) { ... }

它将只执行一次循环体,并将
$content
设置为
$file
的值。我无法想象您的意图是什么。

您应该减少代码,使其构成仍然显示您的问题的尽可能小的示例。您应该减少代码,使其构成最小的可能性仍然显示您的问题的ble示例。
$content
别名为
$file
别名为
$content
别名为
$file