有时,拥有一段仅用于调试或开发调整的 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 条评论