Перл импортировать во все мои пакеты?

Я часто использую 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, поэтому они действительны все время один раз задавать. Вы в основном переписываете их с тем же материалом снова в своем примере.

В производственном коде вы обычно не должны помещать несколько пакетов в один файл, если у вас нет веской причины. Но это не меняет никакого совета выше.