我制作了一个脚本,它返回一个包含几行的数组,例如:
数据:值: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 !”的无限循环。在状态栏中
我的脚本有什么问题?
您没有在
@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 中的循环。