Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Дай дураку метапрограммирование - он и лоб расшибет

Как известно, в перле у функций нет параметров. Предлагается работать с массивом аргументов. Способов работы было придумано несколько. Например, извлекать аргументы по одному, укорачивая (!) массив:
sub foo
{
   my $bar = shift;
   my $baz = shift;
   print "arg 1 = $bar, arg 2 = $baz\n";
}
Это идиоматический код. По-крайней мере в начале 2000-х считался идиоматическим. Т.е. все процедуры всем предлагается писать таким образом.

В стандартной библиотеке функция shift, отрезающая от массива первый элемент.

Аргументом по умолчанию она принимает этот @_ и оптимизирована, так что шифты, по-крайней мере в этом конкретном случае, отрабатывают быстро.

В последние N лет идиома с шифтом почти полностью вытеснена другим кодом:
sub foo
{
   my ($bar, $baz) = @_;
   print "arg 1 = $bar, arg 2 = $baz\n";
}
А недавно, копаясь в кишках какой-то библиотеки, нашёл фантастический вариант:
use Function::Parameters;
 
fun foo($bar, $baz)
{
   print "arg 1 = $bar, arg 2 = $baz\n";
}
Оказалось, что в очередной версии Перла сделали синтаксис расширяемым, и можно писать плагины к парсеру.

А сегодня я обнаружил, что на CPAN есть 100500 разных (!) реализаций этих параметров. Пусть расцветают сто цветов, пусть соперничают сто школ, чо.
Tags: все пидарасы а я
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 8 comments