随笔分类 - Perl语言
摘要:Perl提供了一个Storable模块,用来对数据结构进行序列化(serialization,Perl中称为冻结),也就是将数据结构保存为二进制数据。 序列化后的数据可以写入文件实现持久化,可以将持久化文件拷贝给远程机器 也可以通过网络套接字将序列化数据传递给远程机器 序列化后的数据在任意机器上都可
阅读全文
摘要:首先是深、浅拷贝的概念: 浅拷贝:shallow copy,只拷贝第一层的数据。Perl中赋值操作就是浅拷贝 深拷贝:deep copy,递归拷贝所有层次的数据,Perl中Clone模块的clone方法,以及Storable的dclone()函数是深拷贝 所谓第一层次,指的是出现嵌套的复杂数据结构时
阅读全文
摘要:输出复杂结构 、`Data::Dump Data::Printer`都可以用来输出复杂的数据结构。本文只介绍简单的几个输出形式,以后再需要的地方再详细介绍。 前两者建议传递数据结构的引用给对应的函数、方法,当然直接传递非引用也不会错(标量、数组、哈希或引用都允许)。第三个Printer,则可以自动判
阅读全文
摘要:可有构建匿名的对象,这样就没必要去为只用一两次的数组、hash去取名字,有时候取名是很烦的事。 使用中括号 构建匿名数组 使用大括号 构建匿名hash 不包含任何元素的 和`{}`分别是匿名空数组、匿名空hash 构造匿名对象 例如,在数组、hash中构建匿名数组: 如果不想在匿名数组中输入引号,可
阅读全文
摘要:有时候可能会需要检查引用是什么类型的,免得我们期待是一个数组引用,却给了一个hash引用。 ref函数可以用来检查引用的类型,并返回类型。perl中内置了如下几种引用类型,如果检查的不是引用,则返回undef。 例如: 于是,可以对传入的引用进行判断: 上面的判断方式中,是将HASH字符串硬编码到代
阅读全文
摘要:使用引用可以指向数据对象,这似乎很简单。 但如果想通过引用的方式取出数据对象的值呢,就像上面的print语句中,想要输出 中包含的 的元素,而不是它的地址空间。这需要解除引用(dereference),将 引用还原为数据对象 。 前方预警:dereference虽然不难,但初学之时,比较烧脑,比较眼
阅读全文
摘要:在perl中只有3种基本的数据结构:标量、数组、hash。变量可以是数值,可以是字符串。 这三种基本数据结构的数据存储方式如下: 但是,仅仅由这3种基本结构,就可以构造出更复杂的数据结构,例如hash中用数组做value,数组中用hash做元素。 但是,perl对于底层的一些数据存储,很多时候对这些
阅读全文
摘要:do语句块结构如下: do语句块像是匿名子程序一样,没有名称,给定一个语句块,直接执行。且和子程序一样,do语句块的返回值都是最后一个执行的语句的返回值。 例如,将使用if elsif else结构进行赋值的行为改写成do。以下是if elsif else结构: 改写成do结构: 在perl中,使用
阅读全文
摘要:fork + exec fork是低层次的系统调用,通过复制父进程来创建子进程。 fork的行为 fork用来拷贝当前进程,生成一个基本完全一样的子进程。 如果fork成功: 则表示成功创建子进程,这时会有两条执行路线:继续执行父进程、执行子进程 fork成功时,会返回两个值:对父进程返回子进程的p
阅读全文
摘要:调用操作系统命令:system函数 system函数可以直接让perl调用操作系统中的命令并执行。 system入门示例 例如: 执行结果: 注意system的参数可以被单个引号包围,也可以用多个引号分隔成多个参数,如果分隔开,system会将它们用空格的方式连接起来。 另外,上面使用了单引号、双引
阅读全文
摘要:use加载模块 安装模块后,都会有对应的文档,可以通过 来获取模块的使用帮助。 例如:获取 的使用帮助。 要在perl程序中使用模块,需要使用use来装载(load)模块。例如, 模块: 一般来说,所有要装载的模块都会写在perl程序的开头,因为use语句是程序编译期间执行的,而且以后要查看、修改程
阅读全文
摘要:Perl模块管理 perl有自带的模块,还有第三方模块。自带的模块是随perl安装而安装好的,第三方模块需要从CPAN(Comprehensive Perl Archive Network)上下载并安装,可以从 "https://metacpan.org" 中查找所需第三方模块。 可以借助 来间接
阅读全文
摘要:Perl数组和hash相关函数 内置的数组函数有: 内置的hash函数有: 有些是重复的。所以放在一起解释。 数组相关函数: push:将单元素或一个列表追加到数组的尾部,返回追加后的数组长度具体示例 "push" pop:删除数组中的最后一个元素,返回被pop掉的元素,具体示例 "top" uns
阅读全文
摘要:内置的列表函数有: join:将多个元素使用给定字符串联起来 "join" grep:从列表中筛选符合条件的元素执行对应的代码块 "grep" map:对列表中的元素执行给定操作,后文详细示例 "map" reverse:反转列表、标量字符串、hash,后文详细示例 "reverse" sort:按
阅读全文
摘要:Perl字符串相关函数 字符串的内置函数有: 分为几类: 字符大小写转换类: lc:(lower case)将后面的字母转换为小写,是 的实现 lcfirst:将后面第一个字母转换为小写,是 的实现 uc:(uppercase)将后面的字母转换为大写,是 的实现 ucfirst:将后面第一个字母转换
阅读全文
摘要:tr和 是等价的。用来实现一一映射,但也有额外的功能,就像Linux下的tr命令一样。 用法: 例如: 1.映射功能 将小写字母e替换为大写字母E。 将小写字母全替换为大写字母。 如果对同一个字母指定不同的映射集,那么第一个映射将生效。 2.使用r返回替换后的结果 该修饰符使得处理数据前会先拷贝一份
阅读全文
摘要:s替换 模式用来匹配文本,也就是说用来找数据。而 用来查找并替换文本,所以可以用来处理文本文件。在有了正则的基础之后, 用起来会简单很多。 用法格式为: 它表示用reg去搜索 中的内容,并将搜索出来的内容替换为replacement。 1. 的斜线可以替换为其他对称的符号(括号类)或相同的符号 。
阅读全文
摘要:前言 想必学习perl的人,对基础正则表达式都已经熟悉,所以学习perl正则会很轻松。这里我不打算解释基础正则的内容,而是直接介绍基础正则中不具备的但perl支持的功能。关于基础正则表达式的内容,可参阅基础正则表达式。 另外,本系列只介绍匹配操作,关于内容替换,因为和学习使用perl正则并无多大关系
阅读全文
摘要:分片(slice) 在perl中,如果想要取得一部分变量、一部分列表内容、一部分hash内容,可以采用分片(切片)的方式。 注意,perl并未提供字符串的切片方式,但可以使用内置函数substr()来实现一样的功能。 空变量赋值 例如,有些语言(如golang)支持空变量赋值(如golang),以便
阅读全文
摘要:time用于返回当前时间点,返回格式是以从1970年1月1日(纪元由操作系统决定,但unix系统一般都是1970年1月1日)距离现在的秒数表示的epoch localtime用于返回给定时间的秒、分、时、日、月、年、周等9个部分的时间属性,参数为epoch时间格式,不给参数则返回当前时间点对应的秒、
阅读全文