拾遗:Perl 基础语法
Perl 常用的命令行参数
- -i:将处理结果直接写入文件,可以通过 -i.bak 或 -i"/tmp/orig_*" 等形式,在修改之前进行备份
- -e:启用 perl 的命令行模式,perl 默认是执行脚本文件,必备选项
- -n:按行处理,以类似 grep 的方式逐行读取文件进行处理
- -a:将读入的内容,以特定分割符(默认是空格)分解成多个字段,存入 perl 预定义的 @F 数组中
- -F:与 -a 选项配合使用,用于自定义分割符
Perl 的数据类型:
- 标量:整型、浮点型、字符串等,以 $VarName = “Aa” 形式定义
- 数组:以 @VarName = (“Aa”, 56, “Cc”) 形式定义
- 字典:以 %VarName = {"Aa"=>10, "Ba"=>20, "Cc"=>30} 形式定义
以上三种类型在调用时,也是使用各自的标识符,如:$VarName 调用了一个标量,@VarName 调用了一个数组,%VarName 则调用了一个字典。
如:
- $VarName[2..-1] 是指取数组的第 3 至最后一个元素
- $VarName = (@Var1, @Var2) 表示将两个现有数组的内容合并为一个新数组
- $VarName{"Aa"} 指取字典中 Key 为 "Aa" 的值
相同数据类型之间,可以直接赋值,将数据内容进行复制;若将一个数组以 ‘=’ 赋值给了一个标量,则标量接收到的是数组的元素个数。
Perl 特有的转义字符
- \u:表示将其后紧跟的第一个字符转换为大写
- \U:表示将其后所有字符转换为大写,直到遇到 \E 或到达字符串开尾
- \l:同 \u,转换为小写
- \L:同 \U,转换为小写
- \Q:将其后的所有非字母字符进行转义,即在前面添加转义字符:'\',如:\QI lo_ve cat 将被转换为 I\ lo\_ve \cat
- \E:\U \L \Q 三者的作用域结束标志
Perl 正则变量
- $N:包含上次模式匹配的第 N 个字符串,以圆括号为标识,如:$1、$2 等
- $& 或 $MATCH:前一次成功匹配到的内容
- $` 或 $PREMATCH:前一次匹配到的内容之前的内容
- $' 或 $POSTMATCH:同上,表示之后的内容
Perl 的内置变量
- %ENV :存储主机环境变量的字典
- @ARGV :命令行参数列表
- @F :用于存储 -a 选项分离出来的数组元素,即命令行的数组输入
- STDIN :标准输入文件描述符(句柄)
- STDOUT :标准输出
- STDERR :标准错误
- __FILE__ :perl 脚本所在文件名称
- __LINE__ :perl 语句所在的行号
- __PACKAGE__ :perl 语句所在的包名称
- $! :此变量存储了错误信息
- $_ 或 $ARG :默认输入和模式匹配内容
- @_ :类似 $_
- %_ :类似 $_
- $. 或 $NR:匹配到的内容所在行号
- $/ 或 $RS:输入记录的分割符,默认为行尾,即换行符
- $\ 或 $ORS:输出记录的分割符
- $, 或 $OFS:输出字段的分割符
- $? :上一条外部命令的执行结果状态,0 表示成功
- $PID、$UID、$EUID、$GID、$EGID :进程 ID 等
- $0 :perl 脚本名称
数组操作函数
- push:将指定数据项追加到数组末尾,如:push(@VarName, "Hello", "World")
- pop:将数组最后一个元素弹出(即:删除),并返回这个被弹出的元素的值
- shift:弹出数组的第一个元素,并返回它的值
- unshift:将新元素添加到数组的开头,并返回新数组的元素个数
- splice:数组部分内容替换,如:splice(@VarName, 5, 3, 4, 5, 6),指将数组的第六个元素开始的连续三个元素分别替换为 4 5 6
- split:将字符串按指定的分割符切分成数组,如:split('-', "my-me-you"),将生成数组 ("my", "me", "you")
- join:将数组整合成字符串,如:join('_', ("my", "me", "you")) 就生成了 "my_me_you"
- sort:数组排序,返回排序后的值,如:@VarName = sort(@VarName) 这样操作可直接更改原始值
字典操作函数:
- keys:返回字典所有 key 组成的数组,如:@Keys = keys %Map
- values:返回字典所有 value 组成的数组,如:@Values = values %Map
- exists:检测某个 key-value 是否存在,返回布尔值,如:exists(%Map{"NewYork"})
- delete:从字典中删除元素,如:delete %Map{"London"}
Perl 模式
- 严格模式:如果在 perl 脚本开头指明了 "use strict;",则所有变量之前都必须添加 my 修饰符,表示私有变量
- 警告模式:如果在 perl 脚本开头指明了 "use warnings;",则运行时会有更多的提示
Perl 条件判断:
- if 结构:if...elsif...else...
- unless 结构:unless...elsif...else...
- 三目运算:?::
Perl 循环:
- while
- until
- for
- foreach
- do...while
Perl 循环控制语句:
- next:跳过后续语句,进入下一次循环
- last:结束循环,类似于 C 中的 break
- redo:重新以最初状态开始循环
- goto:类似 C 的跳转
- continue:与 C 中的不同,用于指定每次循环都必须执行的语句,语法如:while {...} continue {...}
Perl 特有的运算符:
- %:取余
- **:幂运算,如:4**10 是指求 4 的 10 次方的值
- <=>:比较两个数字,相等返回 0,前者大返回正数,前者小返回负数
- lt、gt、le、...等:与 shell 中的 -lt、-gt 等类似,但不同的是 perl 用于比较字符串,而不是数字
- cmp:比较两个字符串,相等返回 0,前者大返回正数,前者小返回负数
- &、|、^、~、<<、>>:perl 支持位运算
- and、or、not:逻辑运算符
- q{}:等同于单引号
- qq{}:等同于双引号
- qx{}:等同于反号,用于执行外部 shell 命令
- . :'点'表示连接两个或多个字符串
- x N:表示将前面的字符或字符串重复 N 次
- -> :类与方法的关系符号
Perl 时间函数
- time():1970年1月1日至今的秒数
- localtime():本地时间,格式化输出,类似于 date 命令
- gmtime():格林豪治时间
Perl 函数:
- sub FuncName {...}:定义方式,没有显式的参数列表
- FuncName(...):调用时可以提供任意多个参数
- perl 会将接收到的所有参数存储在内置的 @_ 数组中
- 参数既有标量又有数组时,要把标量放在前面
- 可以传递字典,在函数内部需要以 %VarName 的新字典数据类型接收,以还原字典结构
- my 修饰的变量表示完全私有变量
- local 修饰的变量表示在当前环境及内部调用的函数中有效
Perl 指针(引用)
- \ :反斜线表示引用对象地址,如:$Var = \$VarName 表示 Var 是一个引用(指针),同理,@Var = \@VarName 与 %Var = \%VarName 意义类似;解引用时使用 $$VarName、%%VarName 等这种形式
- [] :方括号可用于创建匿名数组,如:$VarAddr = [1, 2, 3],表示 VarAddr 这个标量中存储了一个匿名数组的地址
- {} :同上,可以定义匿名字典,以标量存储其地址,取其值时,用对应的 $、@、% 标识符解引用,即可获得值
Perl 错误处理函数
- die :显示错误信息,并退出进程,如:system("poweroff") or die "Can't poweroff $!"
- warn:显示错误信息,但不退出进程
拾遗:Perl 基础语法的更多相关文章
- Perl 基础语法
Perl 基础语法 Perl借用了C.sed.awk.shell脚本以及很多其他编程语言的特性,语法与这些语言有些类似,也有自己的特点. Perl 程序有声明与语句组成,程序自上而下执行,包含了循环, ...
- Perl基础语法
一.脚本文件perl 代码可以写在一个文本文件中,以 .pl..PL 作为后缀.文件名可以包含数字,符号和字母,但不能包含空格,可以使用下划线(_)来替代空格.一个简单的Perl 文件名:rurun_ ...
- 3-Perl 基础语法
Perl 基础语法Perl借用了C.sed.awk.shell脚本以及很多其他编程语言的特性,语法与这些语言有些类似,也有自己的特点.Perl 程序有声明与语句组成,程序自上而下执行,包含了循环,条件 ...
- javascript中正则表达式的基础语法
× 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...
- 前端学PHP之基础语法
× 目录 [1]代码标识 [2]注释 [3]输出 [4]计算表达式 [5]大小写 [6]空白符 前面的话 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言.PHP能够包含文本.HTML.CSS ...
- Python 基础语法
Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 ...
- PHP 基础语法 常量 变量
PHP基础语法 标记 当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,这告诉 PHP 开始和停止解析二者之间的代码.此种解析方式使得 PHP 可以被嵌入到各种 ...
- Python学习的个人笔记(基础语法)
Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...
- 前端学PHP之正则表达式基础语法
前面的话 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本 ...
随机推荐
- Eclipse中安装SVN插件的艰难旅程
我们写Java程序的人都知道Eclipse,也装过一些插件,比如Android开发的使用需要安装ADT等,如果代码提交的话我们可能需要安装git和svn的插件,但是这个插件我以前听过,但是一直没有安装 ...
- 合并vector里的内容,输出一个string
string merge_vector(vector<string> dp_scpe_all) { //合并vector里的内容 string new_dp_scpe; ; m < ...
- contest-20191021
文化课读的真不开心 回来竞赛 假人 sol 根据不等式有 abs(a-b)+abs(b-c)>=abs(a-c) 那么每一个都会选. 可以发现每一段只会选在端点上(否则移到端点更优). 那么dp ...
- [HNOI2015]菜肴制作 题解(贪心+拓扑)
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号 ...
- Go语言中接口组合的实现方法
在Go语言中,可以在接口A中组合其它的一个或多个接口(如接口B.C),这种方式等价于在接口A中添加接口B.C中声明的方法. 代码如下: //接口中可以组合其它接口,这种方式等效于在接口中添加其它接口的 ...
- TCP/IP报文格式
1.TCP首部格式 1.1 格式各字段含义 源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程. 目的端口号( 16 位):它(连同目的主机 IP 地址)标识目的主机的一个应 ...
- CSS:CSS 盒子模型
ylbtech-CSS:CSS 盒子模型 1.返回顶部 1. CSS 盒子模型 CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model&quo ...
- 3、获取APP 内存占用率
关于APP内存占用,不用多说,应该是APP性能测试中比较重要的一点.试想一下,开个应用把手机内存占满了,其它应用无法打开,那么这个应用还会有人安装吗?我觉得是没有的.下面就通过adb命令获取APP虚存 ...
- UVA 11178 Morley's Theorem (坐标旋转)
题目链接:UVA 11178 Description Input Output Sample Input Sample Output Solution 题意 \(Morley's\ theorem\) ...
- mysql动态列--统计报表信息对比
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(IF(tmp.summary = ''', tp.summary, ''', tm ...