美文网首页程序员Perl小推车
第十二章 更大的世界

第十二章 更大的世界

作者: 可以没名字吗 | 来源:发表于2016-04-20 16:18 被阅读192次

    Perl的资源丰富,某些有用功能已经集成在核心库中了,更多的则在CPAN上。成熟的Perl程序员懂得如何利用好这些资源。

    有用的核心模块

    Perl语言在设计的过程中一直致力于将实用性和扩展性更好的结合。Perl 5在之前的基础上进行了很大的扩展并且创造了CPAN,但同时它也保留了对之前代码的兼容。(大部分Perl 1的代码能追到1987年 )

    现在我们所认为的好代码和1987年时认为的好代码非常不一样了,有部分原因是因为核心库变了。

    编译指示strict

    该编译指示允许你禁止(或启用)某些语言行为,这些行为虽然功能强大但也可能被滥用,所以需要这么样一个开关来进行控制。

    strict模式下禁止符号引用、要求变量声明和禁止使用未声明的裸字。虽然有时候符号引用是必要的,但隐患巨大,如某些情况下,可通过符号变量操纵私有数据。

    要求变量声明则有助于检查变量名的拼写错误,同时鼓励使用正确的词法作用域。如果变量都使用my或our来声明,那么就很容易就能看出来你期望的作用域。

    strict编译指示的作用域为词法作用域,可通过perldoc strict了解更多细节。

    编译指示warnings

    该编译指示控制着各种告警行为(启用或禁止)。如对下列行为发出警告:字符串化undef值或对变量使用了错误类型的操作符。

    通常,有警告信息产生说明Perl无法理解你的意思而不得不去猜测你的意图,虽然Perl通常会猜测正确,但是消除歧义才能确保你的程序总是会正确运行。

    warnings编译指示的作用域为词法作用域,可通过perldoc perllexwarn和perldoc warnings了解更多细节。

    如果你同时启用了warnings和diagnostics这2个编译指示,则将还获得每条警告的调试信息,具体请参考perldoc perldiag。这些信息对于学习Perl非常有帮助,但是在部署到实际应用时应该关闭diagnostics,因为大量的调试信息会写爆你的日志文件或导致信息泄露。

    编译指示autodie

    之前介绍过,如果你在使用open时忘记了检查返回值,如果操作失败那么后续你就是在操作一个关闭着的句柄---更糟的是如果要写句柄则会丢失数据。编译指示autodie就是来解救你的,假设你这样写:

    use autodie;
    open my $fh, '>', $file;
    

    若open操作失败Perl就会抛出异常。

    对于失败的系统调用,最合适的处理方式就是抛出异常,考虑到系统调用的普遍存在,这个编译指示能帮助你少写很多的相似代码哦。

    有时候也可能需要仅对部分系统调用启用autodie,那么去看看perldoc autodie吧。

    Perl版本号

    在代码中指定的Perl的版本号有助于表达你的意图,同时也能方便对代码使用工具。比如你已经在Perl 5.18下测试过你的代码了,并且这段代码只用到了Perl 5.18中的特性,就可以这样写:

    use 5.018;
    

    更大的世界

    CPAN上也有大量有用的模块。其中Task::Kensho就介绍了不少CPAN上最好用的分发包。当你要解决新问题时,可以先看看里面介绍的那些分发包是否能帮得上你。

    这里我们也简单介绍一些:

    • 操作数据库,可以使用DBI模块
    • 轻量级、单个文件的数据库,可以使用DBD::SQLite模块
    • 管理你的数据库纲要(schema),可以使用Sqitch
    • 将数据库实体表示为对象,使用DBIx::Class
    • 基础的WEB编程,使用Plack
    • 需要强大的WEB框架,试试Mojolicious、Dancer或Catalyst
    • 处理结构化数据文件,用Text::CSV_XS (或Text::CSV)
    • 要管理应用的模块安装,用Carton
    • 需要处理数字类数据,用PDL
    • 处理图片,用Imager
    • 操作共享库,用FFI::Platypus
    • 从XML文件提取数据,用XML::Rabbit
    • 让代码变得更整洁,用Perl::Tidy
    • 需要比strict和warnings更高级的代码分析,用Perl::Critic

    CPAN每天都在发展,去看看最近又上传了哪些新东西:http://search.cpan.org/recent

    用Perl来思考

    创新不会停止,学习也将继续。Modern Perl介绍了最优秀的Perl程序员所使用的方法和技术,然而他们的方法和技术会不断发展。2015年伟大的东西,在五年之前可能是无法想象的,但另一方面,即使是2020年(甚至之后)伟大的东西也可能源自于某个Perl骇客现在脑中的一丝念想。

    你可以在社区中学习、可以阅读核心模块和CPAN模块的文档、还可以通过实践来发现如何让Perl为你工作及工作得更好。

    你有机会去塑造未来!

    相关文章

      网友评论

        本文标题:第十二章 更大的世界

        本文链接:https://www.haomeiwen.com/subject/pbvzlttx.html