} else { $oo_o{$_} = sprintf("%.2f" ,eval {( ( $start_o{$_} / ($total_o{$_} - $now_o{$_}) ) * 100 )} ); $oo_xxx_o{$_} = sprintf("%.2f", eval{( ( $start_o{$_} / $total_o{$_}) * 100 )} ); } } There were 5 of them occured Use of uninitialized value in subtraction (-) at ./sreport line 257, <> line 22420 (#1) (W uninitialized) An undefined value was used as if it were already defined. It was interpreted as a "" or a 0, but maybe it was a mistake. To suppress this warning assign a defined value to your variables. To help you figure out what was undefined, perl tells you what operation you used the undefined value in. Note, however, that perl optimizes your program and the operation displayed in the warning may not necessarily appear literally in your program. For example, "that $foo" is usually optimized into "that " . $foo, and the warning will refer to the concatenation (.) operator, even though there is no . in your program. Use of uninitialized value in division (/) at ./sreport line 257, <> line 22420 (#1) Use of uninitialized value in division (/) at ./sreport line 258, <> line 22420 (#1)