Есть такой код:
my $info = Debug->do_eval($p{reason}) or next;
my $price = $p{discount}? $info->{price}*(100-$p{discount})/100 : $info->{price};
($p{balance} - $price) >= $p{limit_balance} or next;
ref $info->{services} eq 'ARRAY' or next;
Можно его модифицировать и добавить код, который будет подробно писать в лог по каждой замороженной услуге. Только учти, что лога будет много, потом вернешь как было.
debug('record:', \%p);
my $info = Debug->do_eval($p{reason}) or next;
debug('decoded info:', $info);
my $price = $p{discount}? $info->{price}*(100-$p{discount})/100 : $info->{price};
debug('check:', {
'price' => $price,
'balance - price' => ($p{balance} - $price),
'limit_balance' => $p{limit_balance},
'services ok?' => (ref $info->{services} eq 'ARRAY'),
});
($p{balance} - $price) >= $p{limit_balance} or next;
ref $info->{services} eq 'ARRAY' or next;