有时,拥有一个 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 条评论