我倾向于经常使用 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 宏,我知道它实际上具有非函数绑定(bind)的类似 eval 的行为(我可能是错的,如果 Perl 有 lisp 宏会很酷)。
有谁知道如果它是第一个在文件中声明的包,是否可以在不编写解析器为我插入语句的情况下实现这种行为?
最佳答案
您可以构建自己的工具箱模块,打开编译指示、加载模块和设置内容,然后直接加载。模块Import::Into我们对此非常满意。
Here is a blog post这解释了如何去做。
但请注意,您设置的 Data::Dumper 配置实际上与您设置的包无关。这些是 Data::Dumper
包中的包变量,所以它们一旦设置就一直有效。在您的示例中,您实际上是在用相同的内容再次覆盖它们。
在生产代码中,除非有充分的理由,否则通常不应将多个包放在一个文件中。但这不会改变上面的任何建议。
关于Perl 导入我所有的包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953539/