骏马金龙 (新博客:www.junmajinlong.com)

网名骏马金龙,钟情于IT世界里的各种原理和实现机制,强迫症重症患者。爱研究、爱翻译、爱分享。特借此一亩三分田记录自己成长点滴!!!

上一页 1 2 3 4 5 6 7 8 9 10 ··· 15 下一页
摘要: 正则表达式两篇: "基础正则" "Perl正则" 本文是对Perl正则的一点扩展,主要内容是使用 创建正则对象,以及一些其它的技巧。 qr\/\/创建正则对象 因为可以在正则模式中使用变量替换,所以我们可以将正则中的一部分表达式事先保存在变量中。例如: 但是,这样缺陷很大,在保存正则表达式的变量中存 阅读全文
posted @ 2018-10-04 19:57 骏马金龙 阅读(4095) 评论(0) 推荐(0) 编辑
摘要: 目前还没介绍Perl的面向对象,所以这节内容除了几个注意点,没什么可讲的。 以前经常使用大写字母的句柄方式(即所谓的裸字文件句柄,bareword filehandle),现在可以考虑转向使用变量文件句柄的形式,因为只有使用变量句柄的方式,才能创建文件句柄引用。 不管使用裸字还是变量文件句柄的方式, 阅读全文
posted @ 2018-10-03 16:31 骏马金龙 阅读(1349) 评论(0) 推荐(0) 编辑
摘要: 代理方式有三种:正向代理、透明代理和反向代理。反向代理比较容易理解,毕竟是运维必掌握的知识,但是对正向代理、透明代理可能比较模糊,所以主要解惑正向代理和透明代理。 透明代理 透明代理 (transparent proxy),看名字就知道这个代理服务器是透明的,透明代理其实也叫做内网代理(inline 阅读全文
posted @ 2018-10-03 15:25 骏马金龙 阅读(12520) 评论(0) 推荐(6) 编辑
摘要: 在Perl中,子程序的引用常用来做回调函数(callback)、闭包(closure),特别是匿名子程序。 回调函数(callback) 关于什么是回调函数,见 "一文搞懂:词法作用域、动态作用域、回调函数、闭包" 以 模块的find函数为例,它用来搜索给定目录下的文件,然后对每个搜索到的文件执行一 阅读全文
posted @ 2018-10-02 21:41 骏马金龙 阅读(1102) 评论(0) 推荐(1) 编辑
摘要: 把以前一直只限于知道,却不清晰理解的这几个概念完完整整地梳理了一番。内容参考自wiki页面,然后加上自己一些理解。 词法作用域和动态作用域 不管什么语言,我们总要学习作用域(或生命周期)的概念,比如常见的称呼:全局变量、包变量、模块变量、本地变量、局部变量等等。不管如何称呼这些作用域的范围,实现它们 阅读全文
posted @ 2018-10-01 22:20 骏马金龙 阅读(5487) 评论(7) 推荐(12) 编辑
摘要: 子程序也有引用,也有匿名子程序。假设你已经具备了数组、hash的引用知识,所以这里简单介绍一下。 有了子程序引用,就可以按需调用子程序。 例如: 改成匿名子程序: 甚至,将匿名子程序作为数据结构的一部分: 很多时候可能希望子程序的执行结果内插到双引号中,这时可以采用技巧 的方式,将mysub的执行结 阅读全文
posted @ 2018-09-30 20:43 骏马金龙 阅读(924) 评论(0) 推荐(0) 编辑
摘要: Perl提供了一个Storable模块,用来对数据结构进行序列化(serialization,Perl中称为冻结),也就是将数据结构保存为二进制数据。 序列化后的数据可以写入文件实现持久化,可以将持久化文件拷贝给远程机器 也可以通过网络套接字将序列化数据传递给远程机器 序列化后的数据在任意机器上都可 阅读全文
posted @ 2018-09-29 14:00 骏马金龙 阅读(1966) 评论(0) 推荐(2) 编辑
摘要: 首先是深、浅拷贝的概念: 浅拷贝:shallow copy,只拷贝第一层的数据。Perl中赋值操作就是浅拷贝 深拷贝:deep copy,递归拷贝所有层次的数据,Perl中Clone模块的clone方法,以及Storable的dclone()函数是深拷贝 所谓第一层次,指的是出现嵌套的复杂数据结构时 阅读全文
posted @ 2018-09-28 22:15 骏马金龙 阅读(1939) 评论(1) 推荐(0) 编辑
摘要: 输出复杂结构 、`Data::Dump Data::Printer`都可以用来输出复杂的数据结构。本文只介绍简单的几个输出形式,以后再需要的地方再详细介绍。 前两者建议传递数据结构的引用给对应的函数、方法,当然直接传递非引用也不会错(标量、数组、哈希或引用都允许)。第三个Printer,则可以自动判 阅读全文
posted @ 2018-09-28 16:11 骏马金龙 阅读(1455) 评论(0) 推荐(0) 编辑
摘要: 可有构建匿名的对象,这样就没必要去为只用一两次的数组、hash去取名字,有时候取名是很烦的事。 使用中括号 构建匿名数组 使用大括号 构建匿名hash 不包含任何元素的 和`{}`分别是匿名空数组、匿名空hash 构造匿名对象 例如,在数组、hash中构建匿名数组: 如果不想在匿名数组中输入引号,可 阅读全文
posted @ 2018-09-28 14:10 骏马金龙 阅读(1719) 评论(0) 推荐(0) 编辑
摘要: 有时候可能会需要检查引用是什么类型的,免得我们期待是一个数组引用,却给了一个hash引用。 ref函数可以用来检查引用的类型,并返回类型。perl中内置了如下几种引用类型,如果检查的不是引用,则返回undef。 例如: 于是,可以对传入的引用进行判断: 上面的判断方式中,是将HASH字符串硬编码到代 阅读全文
posted @ 2018-09-27 16:30 骏马金龙 阅读(867) 评论(0) 推荐(0) 编辑
摘要: 使用引用可以指向数据对象,这似乎很简单。 但如果想通过引用的方式取出数据对象的值呢,就像上面的print语句中,想要输出 中包含的 的元素,而不是它的地址空间。这需要解除引用(dereference),将 引用还原为数据对象 。 前方预警:dereference虽然不难,但初学之时,比较烧脑,比较眼 阅读全文
posted @ 2018-09-26 22:40 骏马金龙 阅读(1512) 评论(0) 推荐(1) 编辑
摘要: 在perl中只有3种基本的数据结构:标量、数组、hash。变量可以是数值,可以是字符串。 这三种基本数据结构的数据存储方式如下: 但是,仅仅由这3种基本结构,就可以构造出更复杂的数据结构,例如hash中用数组做value,数组中用hash做元素。 但是,perl对于底层的一些数据存储,很多时候对这些 阅读全文
posted @ 2018-09-26 17:25 骏马金龙 阅读(1631) 评论(0) 推荐(0) 编辑
摘要: do语句块结构如下: do语句块像是匿名子程序一样,没有名称,给定一个语句块,直接执行。且和子程序一样,do语句块的返回值都是最后一个执行的语句的返回值。 例如,将使用if elsif else结构进行赋值的行为改写成do。以下是if elsif else结构: 改写成do结构: 在perl中,使用 阅读全文
posted @ 2018-09-24 14:55 骏马金龙 阅读(1783) 评论(2) 推荐(0) 编辑
摘要: fork + exec fork是低层次的系统调用,通过复制父进程来创建子进程。 fork的行为 fork用来拷贝当前进程,生成一个基本完全一样的子进程。 如果fork成功: 则表示成功创建子进程,这时会有两条执行路线:继续执行父进程、执行子进程 fork成功时,会返回两个值:对父进程返回子进程的p 阅读全文
posted @ 2018-09-23 20:31 骏马金龙 阅读(3049) 评论(0) 推荐(0) 编辑
摘要: 调用操作系统命令:system函数 system函数可以直接让perl调用操作系统中的命令并执行。 system入门示例 例如: 执行结果: 注意system的参数可以被单个引号包围,也可以用多个引号分隔成多个参数,如果分隔开,system会将它们用空格的方式连接起来。 另外,上面使用了单引号、双引 阅读全文
posted @ 2018-09-23 00:48 骏马金龙 阅读(8337) 评论(0) 推荐(0) 编辑
摘要: use加载模块 安装模块后,都会有对应的文档,可以通过 来获取模块的使用帮助。 例如:获取 的使用帮助。 要在perl程序中使用模块,需要使用use来装载(load)模块。例如, 模块: 一般来说,所有要装载的模块都会写在perl程序的开头,因为use语句是程序编译期间执行的,而且以后要查看、修改程 阅读全文
posted @ 2018-09-21 12:24 骏马金龙 阅读(2351) 评论(0) 推荐(0) 编辑
摘要: Perl模块管理 perl有自带的模块,还有第三方模块。自带的模块是随perl安装而安装好的,第三方模块需要从CPAN(Comprehensive Perl Archive Network)上下载并安装,可以从 "https://metacpan.org" 中查找所需第三方模块。 可以借助 来间接 阅读全文
posted @ 2018-09-21 11:14 骏马金龙 阅读(5244) 评论(0) 推荐(0) 编辑
摘要: Perl数组和hash相关函数 内置的数组函数有: 内置的hash函数有: 有些是重复的。所以放在一起解释。 数组相关函数: push:将单元素或一个列表追加到数组的尾部,返回追加后的数组长度具体示例 "push" pop:删除数组中的最后一个元素,返回被pop掉的元素,具体示例 "top" uns 阅读全文
posted @ 2018-09-20 13:44 骏马金龙 阅读(1577) 评论(0) 推荐(0) 编辑
摘要: 内置的列表函数有: join:将多个元素使用给定字符串联起来 "join" grep:从列表中筛选符合条件的元素执行对应的代码块 "grep" map:对列表中的元素执行给定操作,后文详细示例 "map" reverse:反转列表、标量字符串、hash,后文详细示例 "reverse" sort:按 阅读全文
posted @ 2018-09-20 09:12 骏马金龙 阅读(1260) 评论(0) 推荐(0) 编辑
摘要: Perl字符串相关函数 字符串的内置函数有: 分为几类: 字符大小写转换类: lc:(lower case)将后面的字母转换为小写,是 的实现 lcfirst:将后面第一个字母转换为小写,是 的实现 uc:(uppercase)将后面的字母转换为大写,是 的实现 ucfirst:将后面第一个字母转换 阅读全文
posted @ 2018-09-18 02:25 骏马金龙 阅读(1558) 评论(0) 推荐(1) 编辑
摘要: tr和 是等价的。用来实现一一映射,但也有额外的功能,就像Linux下的tr命令一样。 用法: 例如: 1.映射功能 将小写字母e替换为大写字母E。 将小写字母全替换为大写字母。 如果对同一个字母指定不同的映射集,那么第一个映射将生效。 2.使用r返回替换后的结果 该修饰符使得处理数据前会先拷贝一份 阅读全文
posted @ 2018-09-16 12:29 骏马金龙 阅读(2161) 评论(0) 推荐(0) 编辑
摘要: s替换 模式用来匹配文本,也就是说用来找数据。而 用来查找并替换文本,所以可以用来处理文本文件。在有了正则的基础之后, 用起来会简单很多。 用法格式为: 它表示用reg去搜索 中的内容,并将搜索出来的内容替换为replacement。 1. 的斜线可以替换为其他对称的符号(括号类)或相同的符号 。 阅读全文
posted @ 2018-09-16 10:30 骏马金龙 阅读(8194) 评论(0) 推荐(0) 编辑
摘要: 前言 想必学习perl的人,对基础正则表达式都已经熟悉,所以学习perl正则会很轻松。这里我不打算解释基础正则的内容,而是直接介绍基础正则中不具备的但perl支持的功能。关于基础正则表达式的内容,可参阅基础正则表达式。 另外,本系列只介绍匹配操作,关于内容替换,因为和学习使用perl正则并无多大关系 阅读全文
posted @ 2018-09-14 19:28 骏马金龙 阅读(13811) 评论(2) 推荐(8) 编辑
摘要: 本文介绍基础正则表达式,没有示例(),只有总结和"解惑",如果想学习更强大、更完整的正则,可以参考: "Perl正则超详细教程" , 、ack都支持Perl正则,且很多需要使用到正则的服务软件一般都采用PCRE(如httpd、nginx、haproxy、proxysql),它和Perl正则几乎完全一 阅读全文
posted @ 2018-09-10 17:17 骏马金龙 阅读(4496) 评论(2) 推荐(5) 编辑
摘要: 分片(slice) 在perl中,如果想要取得一部分变量、一部分列表内容、一部分hash内容,可以采用分片(切片)的方式。 注意,perl并未提供字符串的切片方式,但可以使用内置函数substr()来实现一样的功能。 空变量赋值 例如,有些语言(如golang)支持空变量赋值(如golang),以便 阅读全文
posted @ 2018-09-10 11:44 骏马金龙 阅读(901) 评论(0) 推荐(0) 编辑
摘要: time用于返回当前时间点,返回格式是以从1970年1月1日(纪元由操作系统决定,但unix系统一般都是1970年1月1日)距离现在的秒数表示的epoch localtime用于返回给定时间的秒、分、时、日、月、年、周等9个部分的时间属性,参数为epoch时间格式,不给参数则返回当前时间点对应的秒、 阅读全文
posted @ 2018-09-08 23:36 骏马金龙 阅读(1127) 评论(0) 推荐(0) 编辑
摘要: 在shell中使用 来对文件名进行通配扩展,在Perl中也同样支持文件名通配。而且perl中的glob通配方式和shell的通配方式完全一致,实际上perl的glob函数就是直接调用csh来通配的(如果不存在csh,则使用其它shell),也因此通配是一个效率较低的操作。 glob通配函数 注意: 阅读全文
posted @ 2018-09-08 16:59 骏马金龙 阅读(1696) 评论(0) 推荐(0) 编辑
摘要: File\::Copy复制文件 File\::Copy模块提供了copy函数和cp函数来复制文件,它们参数上完全一致,但行为上稍有区别。 用法大致如下: 两个参数都可以是文件或文件句柄或者文件句柄通配,第一个参数指定源,第二个参数指定目标 如果第一个参数是文件句柄,那么将直接从文件句柄来读取数据,如 阅读全文
posted @ 2018-09-08 15:33 骏马金龙 阅读(6044) 评论(0) 推荐(1) 编辑
摘要: 注意,这些操作的对象是文件名(相对路径/绝对路径),而非文件/目录句柄,句柄只是perl和文件系统中文件的关联通道,而非实体对象。 创建文件 在unix类操作系统中有一个touch命令可以非常方便的创建文件,还能批量创建一些名称规律的文件。但实际上touch的主要介绍中却是"修改文件时间戳",创建文 阅读全文
posted @ 2018-09-06 23:24 骏马金龙 阅读(9719) 评论(0) 推荐(0) 编辑
摘要: 在shell中通过test命令或者中括号 可以进行文件测试以及其它类型的测试,例如判断文件是否存在,比较操作是否为真等等。perl作为更强大的文本处理语言,它也有文件测试类表达式,而且和shell的文件测试用的字母符号都类似。 perl中测试文件的属性来源是perl的内置函数stat,它可以获得文件 阅读全文
posted @ 2018-09-05 00:29 骏马金龙 阅读(2153) 评论(0) 推荐(0) 编辑
摘要: 另一篇关于终端会话共享的文章: "Linux录制、回放和共享终端操作" kibitz可以将一个会话(你所操作的)实时分享给本机的其它登陆用户(你想让别人看到的)。通过这个工具,你敲什么命令,输出了什么内容对方都能立即看到,用来演示很不错。 它是是expect中的一个工具,所以先安装expect。 使 阅读全文
posted @ 2018-09-04 12:49 骏马金龙 阅读(1979) 评论(1) 推荐(2) 编辑
摘要: open函数除了 这种高级重定向模式,perl也有对应的模式。 打开管道文件句柄 perl程序内部也支持管道,以便和操作系统进行交互。例如,将perl的输出在程序内部就输出给操作系统的命令,或者将操作系统的命令执行结果输出给perl程序内部。所以,perl有2种管道模式:句柄到管道、管道到句柄。 例 阅读全文
posted @ 2018-09-01 15:57 骏马金龙 阅读(1546) 评论(3) 推荐(1) 编辑
摘要: 文件句柄 文件句柄用来对应要操作的文件系统中的文件,这么说不太严谨,但比较容易理解。首先为要打开的文件绑定文件句柄(称为打开文件句柄),然后在后续的操作中都通过文件句柄来操作对应的文件,最后关闭文件句柄。 如不理解文件句柄的概念,可将文件句柄看作Linux中文件描述符的概念(当然,它们是不同的,Pe 阅读全文
posted @ 2018-09-01 00:23 骏马金龙 阅读(3778) 评论(0) 推荐(3) 编辑
摘要: 文件句柄相关变量 对应的官方手册:http://perldoc.perl.org/perlvar.html Variables related to filehandles 默认情况下: :输入行的分隔符以换行符为单位,可以使用 指定 :print输出行的分隔符为undef,可以使用 指定,例如指定 阅读全文
posted @ 2018-08-31 22:05 骏马金龙 阅读(1380) 评论(0) 推荐(0) 编辑
摘要: print、printf和say都可以输出信息。print和say类似,print不自带换行符,say自带换行符,但要使用say,必须写use语句 ,printf像C语言的printf一样,可以定制输出格式,不过我这perl似乎不支持printf,一用就报错,不知道为什么。它们有返回值:如果输出成功 阅读全文
posted @ 2018-08-29 22:59 骏马金龙 阅读(2431) 评论(0) 推荐(1) 编辑
摘要: 程序名:$0 表示当前 正在运行的Perl脚本名 。有3种情况: 1. 如果执行方式为 ,则 的值为 而非perl命令本身 2. 如果执行方式为 ,则 的值为 3. 如果执行的是 或`perl E $0 e E` 命令行参数ARGV perl将perl命令行的参数列表放进数组ARGV(@ARGV)中 阅读全文
posted @ 2018-08-29 21:38 骏马金龙 阅读(26417) 评论(0) 推荐(2) 编辑
摘要: 自增和自减 perl也支持数值类型的自增和自减操作。不仅如此,还支持字符、字符串的自增、自减。 如果自增(++)和自减( )符号放在数值的前面,则先增减,再返回; 如果自增(++)和自减( )符号放在数值的后面,则先返回,再增减; 如果自增、自减操作是独立的一句表达式,则自增、自减符号放在前面或后面 阅读全文
posted @ 2018-08-26 10:57 骏马金龙 阅读(2300) 评论(0) 推荐(0) 编辑
摘要: hash类型 hash类型也称为字典、关联数组、映射(map)等等,其实它们都是同一种东西:键值对。每一个Key对应一个Value。 hash会将key/value散列后,按序放进hash桶。 散列后的顺序和存放数据的顺序无关 hash类型的key只能是字符串,value可以是字符串、数值、unde 阅读全文
posted @ 2018-08-23 17:23 骏马金龙 阅读(2347) 评论(0) 推荐(0) 编辑
摘要: die和warn die可以在出现错误的时候停止程序,并给出消息。默认会输出出错的程序名称和出错行号 warn函数和die函数类似,但和die的区别是不会终止程序 die和warn的参数末尾如果给了 ,将不会输出出错的程序名称和出错的程序行号 可以自动探测操作系统层面上的错误并停止程序 例如,下面打 阅读全文
posted @ 2018-08-22 22:01 骏马金龙 阅读(1886) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 15 下一页