$c->forward() возвращает только истину. Истину в последней инстанции :)
А серьезно, он может вернуть лишь одно значение. И оно должно быть истинно. Если оно ложно - результатом будет ноль. И неважно, что вы хотели вернуть пустую строку или undef. Вернется ноль.
Массивы и хеши тоже нельзя возвращать. Т.к. получите последний элемент массива. Ссылки на них - пожалуйста. Ибо ссылка на массив истинна, даже если массив пустой.
Вот собственно и всё :) Теперь чуток примерчиков для наглядности:
sub t_zero { 0 };
sub t_empty { "" };
sub t_undef { undef };
sub t_arr { qw/a b c/ };
sub t_scalar { "ok" };
sub t_arref { [qw/a b c/] };
sub t_hashref{ {} };
sub test {
my ( $self, $c ) = @_;
$c->forward('t_zero'); # 0
$c->forward('t_empty'); # 0
$c->forward('t_undef'); # 0
$c->forward('t_arr'); # 'c'
$c->forward('t_scalar'); # 'ok'
$c->forward('t_arref'); # ['a', 'b', 'c']
$c->forward('t_hashref'); # {}
};
