Perl社区的强大优势之一是CPAN,即Perl综合归档网络 。 如果您为Perl编写了一个可能对其他人有用的模块,那么社区鼓励您在CPAN上发布它。 鉴于Perl社区还鼓励实验和游戏,因此CPAN命名空间的一部分保留给了那些看似琐碎或琐碎的模块,即Acme::层次结构。 这些模块中的一些虽然显然适合“轻而易举”类别,但却是出色的学习练习。 随着万圣节的到来,让我们看看四个有趣的Acme模块,只是为了好玩!

Acme :: LookOfDisapproval

Karen Etheridge的LookOfDisapproval模块证明您可以在Perl中以Unicode实现子例程名称。 她创建了子例程ಠ_ಠ (如果在浏览器中无法正确呈现,请参见下图),其行为与Perl的warn函数相同。 源代码只有29行,比描述该模块的文档短了很多。 此代码段显示了如何使用它:

use Acme :: LookOfDisapproval ;
ಠ_ಠ 'Tsk, tsk, tsk...' ;

输出看起来像常规的Perl警告:


Tsk , tsk , tsk ... at test1 . pl line 2 . 

您可以在该模块上找到更多文档,并在Acme :: LookOfDisapproval上查看源代码。

Acme :: Dice

加载骰子集的算法并不是很难实现,但是让Jim Bacon真正将其发布给开源! 聪明地, Acme::Dice可以掷骰子,并返回骰子集合的总和,或者返回骰子集合中的单个骰子,具体取决于您如何称呼它。 您可以指定掷出多少个骰子,每个骰子有多少面(因此对于角色扮演游戏很有用),以及是否应该偏爱某个值,那么偏重它的程度。 模块中有一个例程可以滚动胡扯或两个六个骰子的骰子,可以选择偏向于滚动7。

下面是一些代码:

use Acme :: Dice qw ( roll_dice roll_craps ) ;

# roll 3d10, honestly
my $total = roll_dice ( dice => 3 , sides => 10 ) ;
print "3d10: $total \n " ;

# roll 6d6, and weight 4 more heavily, returning the individual dice
my @dice = roll_dice ( dice => 6 , sides => 6 , favor => 4 , bias => 40 ) ;
print '6d6: ' . join ( '-' , @dice ) . " \n " ;

# shoot craps, with loaded dice
my $craps_roll = roll_craps ( bias => 30 ) ;
print "Craps roll: $craps_roll \n " ;


并输出:

3d10 : 16
6d6 : 4 - 4 - 3 - 4 - 5 - 4
Craps roll : 7

小心此模块; Jim偷偷摸摸,即使您指定了一套诚实的骰子,也要阅读源代码。 这不是错误。 您可以在Acme :: Dice上查看此模块的源代码。

Acme ::废话

Perl的carp像warn一样工作,但它还会返回调用堆栈跟踪,这对于调试涉及模块调用的问题很有用。 使用carp您可以看到通话的线索,并更好地了解问题出在哪里。 Damian Conway的Acme::Crap让您在错误消息中更加强调。 这是一些代码:

use Acme :: Crap ;

crap "we have a problem" ;
crap ! "this is a bigger problem" ;
crap !! "this problem is pretty serious" ;
crap !!! "really, really bad things have happened" ;


...以及输出:

we have a problem at test1 . pl line 3 .
This is a bigger problem ! at test1 . pl line 4 .
This Problem Is Pretty Serious !! at test1 . pl line 5 .
REALLY , REALLY BAD THINGS HAVE HAPPENED !!! at test1 . pl line 6 .

如您所见,更多的感叹号提高了消息的重点。 如果愿意,可以使用此方法区分警告的严重性。 只有天堂知道你为什么要这么做,但这是一种方法。 此模块的源代码和更多文档位于Acme :: Crap。

Acme :: Damn

在Perl中,对象不过是经过祝福或与类明确关联的数据结构。 bless函数通常在对象构造函数中使用,但也可以轻松地用于将任何格式正确的数据结构关联为类的对象。 虽然bless内置于Perl中,但没有相反的指令可以将数据结构与类分离,而保持原始结构不变。 输入Ian Brayshaw的Acme::Damn ,为开发人员提供这种功能,尽管它可能很少使用。 这是一个摘要片段,可为您提供一个想法:

use Acme :: Damn ;

# bunch of code here, that defines $ref
# $ref could be an arrayref, or a reference to a scalar, but most likely is a hashref

my $obj = bless $ref , 'My::Class' ;
# $obj is now an object instance of My::Class, and you can call methods on it.
$obj -> set_foo ( 123 ) ;

my $new_ref = damn $obj ;   # unbless it!
# neither $new_ref nor $obj are My::Class objects at this point, and
# attempts to use methods from that class on either will result in an error


这有点深奥,但我实际上已经在单元测试代码中看到了Acme::Damn 。 对于这种特定的狭窄情况,它可能是有用的,看起来似乎很奇怪。 该模块的代码和文档位于Acme :: Damn。

CPAN上有成千上万个Acme模块。 Acme::命名空间通常用作发布过程的测试平台,因此新的参与者可以在做更认真的事情之前学习如何创建和发布新模块。 如果您四处挖掘,可能会发现有用的东西,或者至少是一个愉快的笑声!

翻译自: https://opensource.com/life/16/10/trick-or-treat-funny-perl-modules

用有趣的Perl模块捣蛋相关推荐

  1. Perl 模块安装总结

    从 1994 年 10 月 17 日发布的 Perl 5.000 起,Perl 增加了模块的概念,用来提供面向对象编程的能力.这是 Perl 语言发展史上的一个里程碑.此后,广大自由软件爱好者开发了大 ...

  2. 下载perl的mysql模块_安装用于操作MySQL的Perl模块

    在我使用Webmin(version 1.480)管理FreeBSD主机上的MySQL数据库服务器时出现: "警告:您的系统未安装Perl 模块 DBI 和 DBD::mysql,Webmi ...

  3. 从cpan上安装perl模块

    CPAN是perl的一个第三方源码模块库,里面有上百万的perl模块,用来支撑perl强大的功能,从生物工程到天文计算,从宏观世界到原子力学,无所不有.为了很方便的安装perl模块,有人做了一个CPA ...

  4. [转移]安装 BugZilla 时 Perl 模块的安装

    [转移]安装 BugZilla 时 Perl 模块的安装 转移自自己原来在YourBlog上的Blog,写于2004-3-11 13:05:48 看了Jackey的"Windows下BugZ ...

  5. perl模块的安装,查询

    perl模块的安装,查询 linux下cpan安装: # perl -MCPAN -e shell             // 一路回车配置cpan,个别地方需要输入 cpan> instal ...

  6. 使用cpan安装perl模块

    经常会在网上下载一些软件,而很多这些软件是由perl写的,在使用这些软件的过程中,会发现很多问题,我最经常碰到的就是缺少perl模块.而安装perl模块就成了经常需要的操作. 之前的安装方法是通过yu ...

  7. 各种平台下Perl模块的安装方法

    各种平台下Perl模块的安装方法 来源:http://www.linuxforum.net David lee (2001-04-21 18:11:53) Perl到了第五版增加了模块的概念,用来提供 ...

  8. linux perl模块检测,Linux有问必答:如何用Perl检测Linux的发行版本

    提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码.为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu.CentOS.Debian.Fedora等等),以及它 ...

  9. linux 查看是否安装perl模块

    这里介绍两种linux中查看perl模块是否安装的方法,一种是对于单体的模块,一种是对于群体的. 单体验证: [root@root ~]# perl -MShell -e "print\&q ...

最新文章

  1. c语言中go的作用,go语言与c语言的相互调用
  2. .NET中常见的 IL 指令集
  3. python全系列之爬虫scrapy_python爬虫scrapy之登录知乎
  4. laravel 下载报错:Unable to guess the mime type as no guessers are available
  5. Pyomo 优化建模
  6. Linux查看显示编辑文本文件
  7. AI科学计算领域的再突破,昇思MindSpore做“基石”的决心有多强?
  8. bzoj 1085: [SCOI2005]骑士精神(IDA*)
  9. 【渝粤教育】国家开放大学2018年春季 0179-21T数据库基础与应用 参考试题
  10. TCP 理论概述与 Java 编码入门
  11. 《Spring 揭秘》读书笔记
  12. android 4.4 生僻字,Android上显示生僻字的方法
  13. CDA考试-建模分析师-实用性大数据挖掘算法-数据挖掘概述
  14. Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
  15. 浅谈智能卡技术在数字电视小额支付系统中的应用
  16. Ubuntu下LimeSDR-USB或LimeSDR Mini使用说明
  17. 学校计算机采购清单表,附表:采购清单明细表.doc
  18. 新交规驾驶证扣分什么时候清零
  19. Ubuntu Linux 8.04系统下智能拼音输入法
  20. Double与BigDecimal 比较

热门文章

  1. 如何在Hi3559A上运行自己的YOLOv3模型(五)
  2. AFDX(ARINC664)的网络协议——MAC层
  3. 星际无限与约瑟企管战略合作 强势开启资本上市之路
  4. jQuery怎样实现AJXA
  5. Solidworks2016nbsp;SP4nbsp;下载
  6. python写桌面软件如何实现自动升级
  7. 入职第一天发现公司氛围不对,提出离职,让HR归还上家离职证明,HR断然拒绝并拉黑!...
  8. ORACLE 统计各个部门 工资级别为小于2000,2000-3000,3000+的分别为多少
  9. vue3 router Cannot use ‘in‘ operator to search for ‘catch‘ in undefined
  10. 一键转发朋友圈到 APP