随笔分类 - Perl语言
摘要:perl一行式程序系列文章 : "Perl一行式" 获取每行最后一个字段 这里涉及到了选项" a"、数组 。这里同时还会解释 F选项,它和 a常一起使用。 选项" a"和awk的自动字段分割一样,会自动将每行数据划分为几个字段。划分字段的分隔符由 F选项指定。如果没有指定 F,则默认以空白符号进行分
阅读全文
摘要:perl一行式程序系列文章 : "Perl一行式" 所有行的行号 这里涉及了一个特殊变量 。 这个特殊变量代表的是当前处理行的行号。对于Perl的一行式来说,通过``隐式打开的文件句柄默认不会关闭,所以如果参数中有多个文件,进入下一个文件时行号不会重置。 例如: 如果想要每个文件的行号都独立计算。可
阅读全文
摘要:perl一行式程序系列文章 : "Perl一行式" 假如文件file.log内容如下: 每行后加一空行 结果: 这里出现了选项 p 和 e,出现了特殊变量 ,附带的,稍后还会解释另一个选项 n。 perl的 " e"选项 表示后面接perl的一行式表达式,就像sed的 e选项一样。这是一行式perl
阅读全文
摘要:perl一行式程序系列文章 : "Perl一行式" 本文用来收集Perl一行式中涉及到的一些选项、特殊变量的说明,可以用来做速查手册。 本文会逐渐更新。 第一次学Perl一行式时,请直接忽略本文内容,并直接从后面的示例部分开始看 。本文会在每一个示例中解释出现的选项、变量、函数和语法。 一行式选项
阅读全文
摘要:本文是针对没有Perl基础,但想用perl一行式命令取代grep/awk/sed的人,用于速学Perl基础知识。 Perl一行式系列文章: "Perl一行式程序" perl的 e选项 perl命令的 e选项 后可以书写表达式,例如: Perl中的函数调用经常可以省略括号,所以 表示的是 ,但并非总是
阅读全文
摘要:曾经,我熟练操作grep、awk、sed,甚至自认对sed尚算精通,我一度爱上了写脚本。但是随着写脚本的次数多了,需求复杂了,我深深的感受到shell的无奈。 例如,我多次遇到过类似下面这种恶心的需求: 其中sed要操作第2到第5行,同时awk要操作中间的第3行,在awk操作第3行的时候,sed的第
阅读全文
摘要:本系列: "Perl面向对象(1):从代码复用开始" "Perl面向对象(2):对象" "Perl面向对象(3):解构——对象销毁" 第3篇依赖于第2篇,第2篇依赖于1篇。 perl中使用引用计数的方式管理内存,对象也是引用,所以对象的销毁也是由引用计数的管理方式进行管理的。也就是说,当一个对象(也
阅读全文
摘要:本系列: "Perl面向对象(1):从代码复用开始" "Perl面向对象(2):对象" "Perl面向对象(3):解构——对象销毁" 第3篇依赖于第2篇,第2篇依赖于1篇。 已有的代码结构 现在有父类Animal,子类Horse,它们的代码分别如下: lib/Animal.pm中: lib/Hors
阅读全文
摘要:官方手册:http://perldoc.perl.org/perlobj.html 本系列: "Perl面向对象(1):从代码复用开始" "Perl面向对象(2):对象" "Perl面向对象(3):解构——对象销毁" 第3篇依赖于第2篇,第2篇依赖于1篇。 Perl面向对象的三个准则 1. 类就是包
阅读全文
摘要:当写好一个或多个模块后,可以将它构建、打包成"tar.gz",以便让别人安装或者上传到CPAN(如果愿意的话)。对于模块的使用者来说,也不用再使用 来找pm文件,安装后一般都会安装到 路径下,然后直接使用 即可。 Module::Starter 在很早以前,使用h2xz工具,但它实在太古老了。现在很
阅读全文
摘要:官方手册:https://perldoc.perl.org/perlpod.html POD文档是perl的man文档,可以用perldoc输出,也可以直接用man输出。在开始下面的文章之前,请先粗略浏览一到两篇perldoc文档,或去CPAN找几个模块的文档浏览下大致格式。 例如: 执行perld
阅读全文
摘要:这是5个特殊的代码块。要理解这几个块,关键在于几个时间点: (1).程序编译期间 (2).程序执行期间 (3).程序执行结束但还未退出期间 BEGIN块 BEGIN块是在程序编译期间执行的,也就是上面的步骤(1)所在期间 即使程序中出现了语法错误,BEGIN块也会执行 如果出现了多个BEGIN块,则
阅读全文
摘要:单文件版的perl程序只能用于构建较小的脚本程序。当代码规模较大时,应该遵循下面两条规则来构建程序。这样能将程序的各个部分按功能一个一个地细化,便于维护,也便于后续开发。 名称空间和包 名称空间用于组织逻辑逻辑代码和数据,一个 名称空间由一个包名,包内的所有子程序名以及包变量构成 ,出了这个名称空间
阅读全文
摘要:名称冲突问题 假如在sum2.pm中使用require导入了一个代码文件sum1.pm: 如果在sum1.pm中也有一个sum子程序: 那么在运行sum2.pm的时候,将警告子程序重新定义。因为sum2.pm首先编译好自己的sum(),然后在 运行期间require 导入文件时,又再次定义sum()
阅读全文
摘要:从函数复用开始:eval和do执行perl文件 当我们定义了一个功能比较通用的子程序,比如获取数值的绝对值。想要到处使用这个子程序,就得不断复制、粘贴这段绝对值函数的定义文本。显然,这是不太理想的方式。 于是,就将包含这个子程序的代码放进一个perl文件,然后通过特殊的语法去导入这个文件。 例如,文
阅读全文
摘要:正则表达式两篇: "基础正则" "Perl正则" 本文是对Perl正则的一点扩展,主要内容是使用 创建正则对象,以及一些其它的技巧。 qr\/\/创建正则对象 因为可以在正则模式中使用变量替换,所以我们可以将正则中的一部分表达式事先保存在变量中。例如: 但是,这样缺陷很大,在保存正则表达式的变量中存
阅读全文
摘要:目前还没介绍Perl的面向对象,所以这节内容除了几个注意点,没什么可讲的。 以前经常使用大写字母的句柄方式(即所谓的裸字文件句柄,bareword filehandle),现在可以考虑转向使用变量文件句柄的形式,因为只有使用变量句柄的方式,才能创建文件句柄引用。 不管使用裸字还是变量文件句柄的方式,
阅读全文
摘要:在Perl中,子程序的引用常用来做回调函数(callback)、闭包(closure),特别是匿名子程序。 回调函数(callback) 关于什么是回调函数,见 "一文搞懂:词法作用域、动态作用域、回调函数、闭包" 以 模块的find函数为例,它用来搜索给定目录下的文件,然后对每个搜索到的文件执行一
阅读全文
摘要:把以前一直只限于知道,却不清晰理解的这几个概念完完整整地梳理了一番。内容参考自wiki页面,然后加上自己一些理解。 词法作用域和动态作用域 不管什么语言,我们总要学习作用域(或生命周期)的概念,比如常见的称呼:全局变量、包变量、模块变量、本地变量、局部变量等等。不管如何称呼这些作用域的范围,实现它们
阅读全文
摘要:子程序也有引用,也有匿名子程序。假设你已经具备了数组、hash的引用知识,所以这里简单介绍一下。 有了子程序引用,就可以按需调用子程序。 例如: 改成匿名子程序: 甚至,将匿名子程序作为数据结构的一部分: 很多时候可能希望子程序的执行结果内插到双引号中,这时可以采用技巧 的方式,将mysub的执行结
阅读全文