>>Расскажите, как узнать, что функция уже определена, но без её вызова?
>>И как узнать, что нам вернула некая функция: строку, число, список, хеш
>>или функцию? defined(&func);
СПИСОК = ХЕШ = МАССИВ, ХЕШ - АБСТРАКЦИЯ, это контекст либо списковый, либо скалярный.
Можно узнать на что указывает ссылка: ref $ref;
SCALAR, ARRAY, HASH, CODE, GLOB, REF, LVALUE, IO::Handle ...
Вот отличить строку от числа сложнее, но можно воспользоваться third-party классами, но нафиг это нужно.
http://www.perlmonks.org/?node_id=766000
Ну, вспоминая все это ненароком понимаешь, что С/C++ программисту, например, Python будет ближе к сердцу. Perl слишком "другой" язык. Там заложены другие идеи.