>> next unless %{$ret||{}};
Так писать не стоит, т.к. если $ret - undef, то мы зачем-то создаём
пустой хеш, проверяем, что он пустой и делаем next.
ИМХО нагляднее так:
$ret or next;
%$ret or next;
А если хочется именно с unless, тогда так
next unless $ret && %$ret;
Но мне так не нравится.