Может ли Perl BEGIN блокировать распространение вируса или потерять данные? - PullRequest
7 голосов
/ 03 октября 2009

Я все еще новичок в Perl. Поскольку блоки BEGIN запускаются во время компиляции, не может ли распространение вируса или потеря данных из-за простой компиляции? Perl делает что-нибудь, чтобы остановить это? Если это так, значит ли это, что код в BEGIN блоках может действовать по-другому вне его?

Ответы [ 3 ]

13 голосов
/ 03 октября 2009

Да на все эти вопросы. Eclipse IDE была уязвима для этого. Это обсуждается более подробно здесь .

Как и для любого программного обеспечения, вам следует избегать загрузки и запуска чего-либо из источника, которому вы не доверяете. CPAN в целом заслуживает доверия; хотя я не знаю никого, кто преднамеренно выпускал бы мошеннический код в CPAN, возможно, это произошло.

Вы можете избежать запуска кода во время проверок компиляции с флагом $ ^ C , например ::

BEGIN { load_data_from_db() unless $^C; }
2 голосов
/ 03 октября 2009
1 голос
/ 03 октября 2009

Обратите внимание, что иногда это особенность. Блоки BEGIN внутри модулей mod_perl выполняются только один раз, когда они загружаются впервые. Таким образом, у вас есть простой синтаксис для инициализации на уровне страницы в том же сценарии и размещения его «рядом» с кодом, которому он помогает.

Иногда это также полезно для написания сложного кода инициализации, который вы не хотите помещать в верхнюю часть скрипта.

Но в основном это просто тематическая совместимость с awk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...