Magic, на языке Perl - это просто слово, данное атрибутам, применяемым к переменным / функциям, которые позволяют расширить их функциональность. Некоторые из этих функций доступны непосредственно из Perl, а некоторые требуют использования C api.
Прекрасным примером магии является интерфейс tie
, который позволяет вам определять собственную реализацию переменной. Каждая операция, которая может быть выполнена для переменной (например, выборка или сохранение значения), подвергается повторной реализации, что позволяет создавать элегантные и логичные синтаксические конструкции, такие как хэш со значениями, хранящимися на диске, которые прозрачно загружаются и сохраняются за кадром.
Магия также может относиться к особым способам поведения некоторых встроенных функций, таким как, например, первый аргумент map
или grep
может быть либо блоком, либо выражением без выражения:
my @squares = map {$_**2} 1 .. 10;
my @roots = map sqrt, 1 .. 10;
, который не является поведением, доступным для пользовательских подпрограмм.
Многие другие функции Perl, такие как перегрузка операторов или переменные, которые могут возвращать различные значения при использовании с числовыми или строковыми операторами, реализованы с помощью magic. Контекст также можно рассматривать как магию.
Короче говоря, магия - это любое время, когда конструкция Perl ведет себя не так, как предполагает наивная интерпретация, исключение из правила. Магия, конечно, очень сильна, и ее нельзя использовать без особой осторожности. Магия Джонсон, конечно, участвует в исполнении всей магии (см. Ответ FM), но это выходит за рамки этого объяснения.