Perl 导入我所有的包?

标签 perl

我倾向于经常使用 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/

相关文章:

perl - 解析perl中的科学整数表示

perl - 为什么我的 Perl 程序提示 "Can' t locate URI.pm in @INC”?

regex - Perl - 如何匹配不完全相同的字符串?

linux - Perl 信号处理仅在ighandler 调用子例程时起作用一次

perl - 在 perl 中发送多部分邮件

perl - 为什么在这种情况下 Perl 会自动激活?

perl - 如何使用 perltidy 格式化 qw 列表?

perl - 如何让 Net-SMTP-SSL 在 Ubuntu 12.04 中与 Bugzilla 一起工作?

ruby - 查找和替换多个单词

perl - 查找重复项并在匹配时执行脚本