Comments 19
do {
no strict 'refs';
*$_ = sub { html_tag($_, @_) } for qw( h1 h2 h3 p div span ul ol li em strong );
}
Так будет куда элегантнее, ИМХО.
Можно и так, суть от этого не меняется
А вот и нет. Суть меняется кардинально. Вы забываете, что здесь у вас $_ — глобальная переменная, поэтому не создаётся замыкания — значение $_ берётся для момента вызова h1, а не для момента создания ф-ции.
Еще один вариант (с небольшими улучшениями в плане безопасности естественно):
use strict;
our $AUTOLOAD;
print li('me');
sub AUTOLOAD{
my $msg = shift;
my $tag = $AUTOLOAD;
$tag =~ s/.*://;
return sprintf('<%s>%s</%s>', $tag, $msg, $tag);
}
1;
use strict;
our $AUTOLOAD;
print li('me');
sub AUTOLOAD{
my $msg = shift;
my $tag = $AUTOLOAD;
$tag =~ s/.*://;
return sprintf('<%s>%s</%s>', $tag, $msg, $tag);
}
1;
… и туда упадут вообще все вызовы, даже в случае опечатки в имени метода.
Ага, надо добавить еще хэш разрешенных вызовов, а на все остальное делать die. Про безопасность выше это я и имел ввиду — так ее конечно нехорошо использовать.
да, мне тоже не близок автозапуск функций с произвольными именами.
Товарищи, а вы не забываете, что динамическими функциями вы убиваете Code Completion и прочее?
Я конечно понимаю, что на perl`е надо писать раз и навсегда, чтобы ни один человек не понял (и даже автор), но это же не есть гут!
Или и в традиционной разработке на perl`е Code Completion не ценится?
Я конечно понимаю, что на perl`е надо писать раз и навсегда, чтобы ни один человек не понял (и даже автор), но это же не есть гут!
Или и в традиционной разработке на perl`е Code Completion не ценится?
А что такое Code Completion?
К своему стыду, первый раз слышу такой термин
К своему стыду, первый раз слышу такой термин
Это когда мы не забиваем голову знаниями всех функций и модулей, а нажимая в своем любимом редакторе на некое сочетание (обычно Ctrl + Space), получаем их.
Или напр., помним, что функция начинается на sub, нажимаем это и получаем все функции, начинающиеся на sub.
Мелочь, а экономит время + объем головы.
Или напр., помним, что функция начинается на sub, нажимаем это и получаем все функции, начинающиеся на sub.
Мелочь, а экономит время + объем головы.
Честно говоря, никогда не пользовался. Если мне надо найти какую-нибудь функцию, то grep'a вполне достаточно. Кстати, grep найдет не только саму функцию, но и примеры ее использования — а это обычно как раз то, что нужно знать.
Кроме того, если сравнивать удобства от использования Code Completion с преимуществами, которые потенциально может дать динамическое программирование, то тут вообще не о чем говорить.
Кроме того, если сравнивать удобства от использования Code Completion с преимуществами, которые потенциально может дать динамическое программирование, то тут вообще не о чем говорить.
Попробуйте посчитать в секундах (минутах), сколько у Вас это займёт.
Потом учтите, что отвлечение на поиск функции в доках (иным способом), выбивает из состояния «потока» на некоторое время и Вы увидите, сколько времени тратится на всякую ненужную деятельность.
А время — деньги.
А про magic и проч. динамическое — это имеет смысл, когда делаешь на раз и только для себя.
В команде это — дурной тон, ибо лишний раз приходится документировать то, что может само себя автоматом задокументировать.
Хотя если мы говорим о чём-то некоммерческом — то тут-то да!
Потом учтите, что отвлечение на поиск функции в доках (иным способом), выбивает из состояния «потока» на некоторое время и Вы увидите, сколько времени тратится на всякую ненужную деятельность.
А время — деньги.
А про magic и проч. динамическое — это имеет смысл, когда делаешь на раз и только для себя.
В команде это — дурной тон, ибо лишний раз приходится документировать то, что может само себя автоматом задокументировать.
Хотя если мы говорим о чём-то некоммерческом — то тут-то да!
Кстати да — очень тяжело редактировать чужой модуль если функции создаются на лету, сталкивался пару раз и больше не хочу.
С другой стороны можно генерировать функции для доступа к данным в хэше на основании ключей хэша, что бы писать $row->id вместо $row->get('id').
С другой стороны можно генерировать функции для доступа к данным в хэше на основании ключей хэша, что бы писать $row->id вместо $row->get('id').
Никогда не видел code completition для Perl'а.
Возможно потому, что разобрать синтаксис перла до конца правильно может только перл =).
Возможно потому, что разобрать синтаксис перла до конца правильно может только перл =).
Sign up to leave a comment.
Функции по требованию