使用 Perl CGI 从具有条件的数组中打印 HTML 表

问题描述 投票:0回答:1

我制作了一个脚本,它返回一个包含几行的数组,例如:

数据:值:VALUE_MAX

我需要用这些值填充表格,例如:

NAME |  Status
--------------------------
DATA |  OK/minor/warning...
.... |  .........
.... |  .........

使用 VALUE 和 VALUE_MAX,我计算出状态的百分比。

这是我打印表格的代码:

my @i = my_status();

print <<END;
<div class="container">
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
END
my $inc = 0;
while (@i) {
my @temp = split /:/, @i[$inc];
my $name = $temp[0];
my $percent = ($temp[1] * $temp[2] / 100);
my $status = undef;
if ($percent <= 24 ) {
print "<tr class='info'>";
$status = "Critical !";
}
elsif ($percent <= 49 ) {
print "<tr class='danger'>";
$status = "Danger !";
}
elsif ($percent <= 74 ) {
print "<tr class='warning'>";
$status = "Warning";
}
elsif ($percent <= 99 ) {
print "<tr class='active'>";
$status = "Minor";
}
elsif ($percent == 100 ) {
print "<tr class='success'>";
$status = "OK";
}
print "<td>$name</td>";
print "<td>$status</td>";
print "</tr>";
$inc++;
}
print <<END;
</tbody>
</table>
</div>
END

我的脚本“my_status”执行起来有点长,里面充满了服务器请求...

但问题是,在 HTML 页面上,一切都一团糟,我得到了错误的值,并且陷入了只打印“Critical !”的无限循环。在状态栏中

我的脚本有什么问题?

html perl cgi
1个回答
2
投票

没有

@i
循环中迭代
while
。你的线路

while (@i) {

意味着只要

@i
为真,它就会一直处于循环中。因为这是一个数组,这意味着只要
@i
中有项目,它就会留在循环中。

您不要从循环内部的

@i
中删除任何内容。没有
shift
pop
命令,并且您也不会覆盖
@i
。所以它将无限期地保留。你已经陷入了无限循环。


您想要的可能是一个

foreach
循环。那你也不需要
$inc
。它将把
@i
内的每个元素放入
$elem
并运行循环。

foreach my $elem (@i) {
    my @temp    = split /:/, $elem;
    my $name    = $temp[0];
    my $percent = ( $temp[1] * $temp[2] / 100 );
    my $status  = undef;
    if ( $percent <= 24 ) {
        print "<tr class='info'>";
        $status = "Critical !";
    }
    elsif ( $percent <= 49 ) {
        print "<tr class='danger'>";
        $status = "Danger !";
    }
    elsif ( $percent <= 74 ) {
        print "<tr class='warning'>";
        $status = "Warning";
    }
    elsif ( $percent <= 99 ) {
        print "<tr class='active'>";
        $status = "Minor";
    }
    elsif ( $percent == 100 ) {
        print "<tr class='success'>";
        $status = "OK";
    }
    print "<td>$name</td>";
    print "<td>$status</td>";
    print "</tr>";
}

您可以从 for 循环开始阅读 perlsyn 中的循环。

© www.soinside.com 2019 - 2024. All rights reserved.