2016-10-13 2 views
0

я сделал скрипт, который возвращает мне массив с несколькими линиями, как:печати HTML Таблица из массива с условием с Perl CGI

ДАННЫЕ: ЗНАЧЕНИЕ: 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-страница, все беспорядок, я ошибаюсь, и бесконечный цикл, который печатает только «Критический!». в статусе colomns

Что случилось с моим скриптом?

+0

Почему у _critical_ есть класс 'info'? – simbabque

+0

@simbabque это просто класс для цвета, я изменю его после, на самом деле у меня есть несколько таблиц, чтобы заполнить эти значения, это всего лишь способ заставить его работать в первую очередь ^^ – superzero10

ответ

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>"; 
} 

Вы можете читать на петлях в perlsyn starting from for loops.

Смежные вопросы