2016-12-03 33 views
3

我倾向于经常使用Data :: Dumper,并且最终在我的.pl代码的每个包的顶部都有以下样板。Perl导入到我的所有包中?

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没有我知道的实际上具有非函数绑定eval-like bahavior的Lisp宏(我可能是错的,如果Perl有lisp宏,那将非常酷)。

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

回答

5

你可以建立你自己的工具箱模块,打开杂注,加载模块和设置东西,并加载它。模块Import::Into我们很好。

Here is a blog post解释了如何做到这一点。

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

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

+1

这是一个链接唯一的答案,因为我从我的手机写它。稍后将添加代码示例。 – simbabque

+0

非常有帮助,因为它的立场:)我一直在思考如何避免在一个大型项目中跨越十几个+脚本的半打+相同导入。到目前为止,我没有发现任何运作良好的东西,将很乐意检查这一点! – zdim

+0

噢......这个_actually works_ - 它可以让人想象,而且很简单。谢谢。它解决了一个非常大的项目中非常棘手的问题。 – zdim

相关问题