А вот и нет. Суть меняется кардинально. Вы забываете, что здесь у вас $_ — глобальная переменная, поэтому не создаётся замыкания — значение $_ берётся для момента вызова h1, а не для момента создания ф-ции.
Ага, надо добавить еще хэш разрешенных вызовов, а на все остальное делать die. Про безопасность выше это я и имел ввиду — так ее конечно нехорошо использовать.
Это я неправильно выразился.
Тот вариант, что я представил, нуждается в улучшении — AUTOLOAD надо допилить немного, хотя бы сделать там список разрешенных функций.
Это когда мы не забиваем голову знаниями всех функций и модулей, а нажимая в своем любимом редакторе на некое сочетание (обычно Ctrl + Space), получаем их.
Или напр., помним, что функция начинается на sub, нажимаем это и получаем все функции, начинающиеся на sub.
Честно говоря, никогда не пользовался. Если мне надо найти какую-нибудь функцию, то grep'a вполне достаточно. Кстати, grep найдет не только саму функцию, но и примеры ее использования — а это обычно как раз то, что нужно знать.
Кроме того, если сравнивать удобства от использования Code Completion с преимуществами, которые потенциально может дать динамическое программирование, то тут вообще не о чем говорить.
Попробуйте посчитать в секундах (минутах), сколько у Вас это займёт.
Потом учтите, что отвлечение на поиск функции в доках (иным способом), выбивает из состояния «потока» на некоторое время и Вы увидите, сколько времени тратится на всякую ненужную деятельность.
А время — деньги.
А про magic и проч. динамическое — это имеет смысл, когда делаешь на раз и только для себя.
В команде это — дурной тон, ибо лишний раз приходится документировать то, что может само себя автоматом задокументировать.
Хотя если мы говорим о чём-то некоммерческом — то тут-то да!
Функции по требованию