一个可以更好地调试的 Perl 模块

简介:

仅用于调试或开发调整时的 Perl 代码块有时会很有用。这很好,但是这样的代码块可能会对性能产生很大的影响, 尤其是在运行时才决定是否执行它。

Curtis "Ovid" Poe 最近编写了一个可以帮助解决这个问题的模块:Keyword::DEVELOPMENT。该模块利用 Keyword::Simple 和 Perl 5.012 中引入的可插入关键字架构来创建了新的关键字:DEVELOPMENT。它使用 PERL_KEYWORD_DEVELOPMENT 环境变量的值来确定是否要执行一段代码。

使用它不能更容易了:

 
  1. use Keyword::DEVELOPMENT;
  2. sub doing_my_big_loop {
  3. my $self = shift;
  4. DEVELOPMENT {
  5. # insert expensive debugging code here!
  6. }
  7. }

在编译时,DEVELOPMENT 块内的代码已经被优化掉了,根本就不存在。

你看到好处了么?在沙盒中将 PERL_KEYWORD_DEVELOPMENT 环境变量设置为 true,在生产环境设为 false,并且可以将有价值的调试工具提交到你的代码库中,在你需要的时候随时可用。

在缺乏高级配置管理的系统中,你也可以使用此模块来处理生产和开发或测试环境之间的设置差异:

 
  1. sub connect_to_my_database {
  2. my $dsn = "dbi:mysql:productiondb";
  3. my $user = "db_user";
  4. my $pass = "db_pass";
  5. DEVELOPMENT {
  6. # Override some of that config information
  7. $dsn = "dbi:mysql:developmentdb";
  8. }
  9. my $db_handle = DBI->connect($dsn, $user, $pass);
  10. }

稍后对此代码片段的增强使你能在其他地方,比如 YAML 或 INI 中读取配置信息,但我希望您能在此看到该工具。

我查看了关键字 Keyword::DEVELOPMENT 的源码,花了大约半小时研究,“天哪,我为什么没有想到这个?”安装 Keyword::Simple 后,Curtis 给我们的模块就非常简单了。这是我长期以来在自己的编码实践中所需要的一个优雅解决方案。


原文发布时间为:2018-05-21

本文来自云栖社区合作伙伴“Linux中国开源社区”,了解相关信息可以关注“Linux中国开源社区”。

目录
打赏
0
0
0
0
73530
分享
相关文章
|
7月前
|
探索研究Perl 包和模块
【9月更文挑战第20天】
74 16
Python中有哪些容易被忽视的核心功能
Python编程中,一些被忽视的核心功能包括:`argparse`库用于命令行参数解析,简化工具编写;使用`with`语句配合上下文管理器确保资源正确释放;列表推导式和生成器表达式创建列表和轻量级迭代;字典的`setdefault()`方法避免键不存在时的额外检查;默认参数值简化函数调用;`namedtuple`增加元组可读性;集合操作符执行并集、交集和差集;`lru_cache`缓存函数调用提高性能;`enumerate()`在迭代列表时同时访问索引和值;以及`Counter`统计元素频率。掌握这些功能可提升代码质量和效率。
Python中的装饰器:一种强大的功能增强工具
装饰器是Python中一个独特且强大的功能,它允许在不修改原有函数或类代码的情况下,为其添加额外的功能或行为。本文将深入探讨Python装饰器的原理、用法以及在实际开发中的应用场景,帮助读者更好地理解和应用这一技术。
运维Python自动化之路:基础信息模块之psutil模块
运维Python自动化之路:基础信息模块之psutil模块
460 0
运维Python自动化之路:基础信息模块之psutil模块
【Python 】常用运维模块psutil模块
本篇内容介绍了“怎么用Python实现查询CPU和内存”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让我带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 运维最头痛的事情莫过于分配的资源少于需求,会遇到 CPU 负载高、队列堵塞、任务运行时间长、超时以及潜在的崩溃隐患等问题。而分配的资源太多,则造成不必要的资源和财力浪费。
Python 开发工具集:关于文档、测试、调试、程序的优化和分析
Python已经演化出了一个广泛的生态系统,该生态系统能够让Python程序员的生活变得更加简单,减少他们重复造轮的工作。同样的理念也适用于工具开发者的工作,即便他们开发出的工具并没有出现在最终的程序中。本文将介绍Python程序员必知必会的开发者工具。
240 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等