有时,拥有一个 Perl 代码块仅用于调试或开发调整是很有用的。这很好,但是拥有这样的代码块可能会对性能造成影响,尤其是在运行时才决定是否执行它时。
Curtis "Ovid" Poe 最近编写了一个模块来帮助解决这个问题:Keyword::DEVELOPMENT。该模块利用 Keyword::Simple 和 Perl 5.012 中引入的可插拔关键字架构来创建一个新的关键字:DEVELOPMENT。它使用 PERL_KEYWORD_DEVELOPMENT 环境变量的值来确定是否执行代码块。
使用它再简单不过了
use Keyword::DEVELOPMENT;
	
sub doing_my_big_loop {
    my $self = shift;
    DEVELOPMENT {
        # insert expensive debugging code here!
    }
}在编译时,DEVELOPMENT 块内的代码会被优化掉,并且根本不存在。
您看到这里的优势了吗?在您的沙箱环境中将 PERL_KEYWORD_DEVELOPMENT 环境变量设置为 true,在您的生产环境中设置为 false,那么有价值的调试工具就可以提交到您的代码仓库中,在您需要时随时可用。
您也可以使用此模块,在没有更完善的配置管理系统的情况下,来处理生产环境和开发或测试环境之间设置的差异
sub connect_to_my_database {
	
    my $dsn = "dbi:mysql:productiondb";
    my $user = "db_user";
    my $pass = "db_pass";
    
    DEVELOPMENT {
        # Override some of that config information
        $dsn = "dbi:mysql:developmentdb";
    }
    
    my $db_handle = DBI->connect($dsn, $user, $pass);
}
稍后对此代码片段的增强功能将让您从其他地方读取配置信息,可能来自 YAML 或 INI 文件,但我希望您能看到这里的实用性。
我查看了 Keyword::DEVELOPMENT 的源代码,花了大约半个小时思考,“天哪,我为什么没想到呢?” 一旦安装了 Keyword::Simple,Curtis 给我们的模块就非常简单了。这是一个优雅的解决方案,可以解决我长期以来在我的编码实践中需要的东西。
 
 
 
 
 

5 条评论