Perl导入到我的所有包中?

Dmi*_*try 3 perl

我经常使用Data :: Dumper,最后我的.pl代码中每个包的顶部都有以下样板文件.

use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Deparse = 1;
$Data::Dumper::Purity = 1;
Run Code Online (Sandbox Code Playgroud)

有没有办法指定"在当前.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;
Run Code Online (Sandbox Code Playgroud)

这可以很快得到太多的样板重复和损害可维护性.

遗憾的是,我无法在其中使用带有"eval"的函数来调用所有这些样板文件,因为该样板文件将被放入函数中,而不是全局范围; Perl没有我知道的Lisp宏实际上有非函数绑定的eval-like行为(我可能是错的,如果Perl有lisp宏会很酷).

有没有人知道如果没有编写解析器来为我插入语句,如果它是在文件中声明的第一个包,是否可以实现此行为?

sim*_*que 5

您可以构建自己的工具箱模块,打开编译指示,加载模块并设置内容,然后加载它.模块导入::对我们来说很棒.

这是一篇博客文章,解释了如何做到这一点.

但请注意,您正在设置的Data :: Dumper的配置实际上与您正在设置的包无关.这些是包中的Data::Dumper包变量,因此它们一旦设置就一直有效.在你的例子中,你基本上用相同的东西覆盖它们.

在生产代码中,除非有充分的理由,否则通常不应将多个包放在一个文件中.但这并没有改变上述任何建议.