一个可以更好地调试的 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中国开源社区”。

相关文章
|
关系型数据库 MySQL 数据库
docker 安装 mysql 并映射数据库存放路径及配置文件
本文是博主学习docker镜像的记录,希望对大家有所帮助。
4634 0
docker 安装 mysql 并映射数据库存放路径及配置文件
|
机器学习/深度学习 存储 人工智能
人工智能与未来医疗:革命性技术的潜力与挑战
【10月更文挑战第2天】 本文探讨了人工智能在医疗领域的应用及其潜在影响。通过分析当前AI技术的发展现状以及在医学诊断、治疗和患者管理中的具体应用,揭示了这一技术如何提升医疗服务质量和效率。同时,讨论了AI在医疗领域所面临的伦理、隐私和安全等挑战,呼吁建立相应的监管和标准以确保其安全有效地发展。
370 4
|
11月前
|
SQL 存储 数据管理
一篇文章带你掌握SQLite3基本用法
通过本文的介绍,希望您能深入理解SQLite3的基本用法,并在实际开发中灵活运用这些知识,提升数据管理效率。
1524 5
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
1921 7
|
存储 SQL 关系型数据库
Pandas与数据库交互:实现高效数据交换与存储
【4月更文挑战第16天】本文介绍了Pandas与数据库交互的方法,包括使用`read_sql`和`to_sql`函数连接SQLite、MySQL等数据库。为了提升数据交换效率,建议采用批量操作、优化SQL查询和使用事务。在数据存储优化方面,选择合适的数据类型、压缩数据以及使用分区或分片都是有效策略。通过这些方法,可实现Pandas与数据库间高效、可靠的数据处理和分析。
|
安全 数据安全/隐私保护 Android开发
三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能
众所周知,随着科技的发展和时代的进步,远程控制软件在日常工作中的运用所处可见,社会对远程控制软件的需求也在日益增长,为用户提供了便捷的远程访问和控制计算机的能力,使其在现代化社会中扮演着重要的角色。因此,市面上也出现了很多相似功能的产品,但是他们各有不同的特点和功能。本文主要介绍的是ToDesk、向日葵、TeamViewer三款远程控制软件间的不同之处,我将从安全、稳定、易用、兼容、功能几个方面来进行对比,帮助大家选择适合自己需求的远程办公软件。
568 1
三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能
|
搜索推荐 程序员 SEO
程序员怎么接私活:外包众包接单方法!
程序员怎么接私活:外包众包接单方法!
|
关系型数据库 Docker Python
什么是Docker Volume?
摘要:Docker Volume,通常翻译为数据卷,用于保存持久化数据。当我们将数据库例如MySQL运行在Docker容器中时,一般将数据通过Docker Volume保存在主机上,这样即使删除MySQL容器,数据依然保存在主机上,有效保证了数据的安全性。
4288 1
《电路/电路原理》—戴维宁(南)定理实战演练
《电路/电路原理》—戴维宁(南)定理实战演练
1183 1
《电路/电路原理》—戴维宁(南)定理实战演练
|
机器学习/深度学习 Python
深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码
深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码
深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码