$cash=$cash-sprintf("%.2f",$cash * $discount/100);
По-моему так красивее:
$cash=sprintf("%.2f",$cash * (1-$discount/100));
А вообще, глоб. переменную трогать и правда нельзя, но там она не глобальная, но не важно...
Там перед тем, как снимать с абона нужно сделать или другую переменную, или добавлять подсчет скидки в двух местах, или делать
my а лучше всего
localт.е.
$mid=$p->{id};
$Ustart_day{$mid}<0 && next; # пока не начал пользоваться услугами
local $cash=sprintf("%.2f",$cash * (1-$discount/100)) if $discount; #Нафига нам что-то считать если скидки нет!?