Перл импортировать во все мои пакеты?
Я часто использую Data:: Dumper очень часто, и в итоге у меня есть следующий шаблон в верхней части каждого пакета в моем .pl-коде.
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Deparse = 1;
$Data::Dumper::Purity = 1;
Есть ли способ указать, что "внутри текущего .pl файла я хочу, чтобы эти утверждения автоматически принимались".
например, я бы имел
package foo;
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Deparse = 1;
$Data::Dumper::Purity = 1;
my @localState = (1, 2, 3, 4, 5);
sub test {
print Dumper \@localState;
}
package main;
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Deparse = 1;
$Data::Dumper::Purity = 1;
foo->test;
это может быстро получить слишком много повторений шаблонов и снизить ремонтопригодность.
К сожалению, я не могу использовать функцию с "eval" в ней, чтобы вызвать весь этот шаблон, поскольку этот шаблонный план будет помещен в функцию, а не в глобальную область; Perl не имеет макросов Lisp, которые, как я знаю, имеют не-функциональное связанное с eval-бэйгером (я мог ошибаться, было бы так здорово, если бы у Perl были макросы Lisp).
Кто-нибудь знает, может ли быть достигнуто это поведение без написания синтаксического анализатора, чтобы вставлять инструкции для меня, если это первый пакет, объявленный внутри файла?
Ответы
Ответ 1
Вы можете создать свой собственный модуль инструментов, который включает прагмы, загружает модули и наборы, и просто загружает их. Модуль Import::Into для нас отличный.
Вот сообщение в блоге, в котором объясняется, как это сделать.
Но помните, что конфигурация для Data:: Dumper, которую вы устанавливаете, на самом деле не связана с пакетом, в котором вы его устанавливаете. Это переменные пакета в пакете Data::Dumper
, поэтому они действительны все время один раз задавать. Вы в основном переписываете их с тем же материалом снова в своем примере.
В производственном коде вы обычно не должны помещать несколько пакетов в один файл, если у вас нет веской причины. Но это не меняет никакого совета выше.