Понятие замыкания может быть уместным.
Замыкание - это функция, но она определена в некоторой области (скажем, в другой функции) и имеет доступ ко всем переменным в этой области. Таким образом, он имеет большинство свойств, которые вы перечисляете, за исключением того, что он объявлен в заголовке и (обычно) имеет имя. В любом случае заголовки - это деталь реализации языка, а не функция как таковая :-). Обычно замыкания могут быть возвращены из функции, в которой они определены, и на языке GC они будут поддерживать ссылки на локальные переменные, которые они используют.
Также учтите, что в Perl есть два различных типа переменных области видимости - лексические переменные ("my") и динамические переменные ("local"). Лексические переменные - это локальные переменные, к которым вы привыкли в C, Java и так далее. Динамические переменные видны из любой функции, вызываемой из блока, который их объявил. Поэтому, если все ваши переменные объявлены с local
, все функции Perl имеют желаемые свойства.
Во всех случаях я пропустил «создавать новые переменные, которые не уничтожаются при выходе из функции». Это довольно редко, так как предполагает, что переменные, объявленные в функциях, имеют глобальную область видимости, и это не типичный случай в большинстве языков. Обычно вы можете подделать его, имея какой-то глобальный объект и повесив на него что-нибудь, но это редко полезно.