Perl 入门

在IC设计领域,Perl是一种常用的脚本语言,对Perl的学习是有必要的。

本文为根据B站 IC工程师学Perl:Perl 语言基本的语法_哔哩哔哩_bilibili 系列视频的学习笔记。原视频讲解的非常简洁、清晰,推荐看视频学习。本文如有侵权,请联系删除。

一、Perl语言的基本语法

Perl语言名称的由来

比较适合文本的处理

一个最简单Perl语言

第一行指定所在系统Perl解释器的位置

Perl程序不关心空格,所有类型的空格,比如空格、制表符、换行符等,当它们在引号外使用时,对解释器来说都是等效的。

Perl程序中双引号和单引号:双引号中会进行转义(如 \n 打印为换行,$变量打印为变量值),单引号不会

例如,

执行结果为

执行结果为

Perl的标识符(变量名称),以$ @ % 开头,分别表示标量、数组、哈希,后面跟字母、下划线、数字。

注意,Perl区分大小写。

二、数据类型

Perl语言相对语法比较松散,无需为数据指定类型

有三种基本数据类型:

标量:可以是数字、字符串或指针。

数组:是一个有序的列表。

哈希:是一种无序的键/值对集合。

Perl语言中可以不用提前显示声明变量,而直接使用

数组使用的例子:

引用数组中的单个元素,使用 $

哈希是想解决数组内容过大的问题

哈希使用的例子,引用哈希内的值也是使用 $

变量的上下文:数组赋给标量,取的是数组的长度

三、标量

标量是单个数据单元,可以是整数、浮点数、字符、字符串

标量的操作,还是有上下文的概念,如果标量是字符串就进行字符串操作,是数值就进行数值的操作

如果想在程序中引入多行字符串,在定义时需要使用单引号,如果用双引号换行符会被忽略掉

Perl语言的特殊标量,

此外还有输入输出的数组,循环的索引等

四、数组

数组的声明,注意用qw/ /的声明方法

数组的索引从0开始,[0]代表索引第一个元素

数组索引的值可以是负数,[-1]代表索引最后一个元素

数组的切片:数组的某一部分构造新的数组

其中[1..3]称为序列数组。利用这种方法,可以便捷设置连续的数字或字符数组。

比如 @adc = (a..z);为从a连续到z的字符数组。

数组的大小:

把数组赋值给一个标量,这个标量获得的就是这个数组的元素个数

$ size = @ array;

在数组中添加和删除元素:

push,在数组的最后添加一个元素

pop,在数组的最后位置删除一个元素

unshift,在数组的第一个位置添加一个元素

shift,在数组的第一个位置删除一个元素

数组的替换/覆盖

使用splice函数,

将字符串分割为数组

将数组转换为字符串

数组排序

sort函数,根据ASCII大小排序

合并数组

五、哈希

哈希的声明

访问哈希元素

使用花括号

哈希切片

提取键和值

使用keys函数,values函数

检查元素是否存在

获取哈希大小

哈希中添加和删除元素

通过赋值添加;通过delete函数删除

六、条件分支

条件判断中真假的判断

Perl中提供了unless else,跟if的逻辑相反,但是一般不会使用,其功能完全可以用if else实现

另外还提供了switch,有点类似verilog中的case

支持问号表达式 ? :,与verilog中用法相同

七、循环控制

提供了如下的循环语句

与while相比,do while至少会执行一次循环体;

foreach适合于对数组的遍历操作;

until与while的用法想法,满足条件则退出

循环控制语句

next,执行下次循环(类似C语言中的continue),last,退出循环(类似C语言break)

八、运算符

Perl中重要且最常用的运算符包括

算数运算符:加减乘除,取余,乘方

等式运算符,或者关系运算符

如果操作数是数值

如果操作数是字符,根据ASCII码进行比较

比较常用的是 eq 等于,ne 不等于,cmp 比较大小。此外还有 lt 小于,gt 大于,le 小于等于,ge大于等于

赋值运算符

对一个操作数进行操作并赋值回这个操作数本身

位运算符

单个& | ^,与verilog类似

逻辑运算符

与 and 或 &&,或 or 或 ||, 非 not

引用运算符

使用 q{ } 表示 单引号, qq{ } 表示 双引号

其他运算符

*可以用来表示复制几次

++,--,类似C语言中的自加自减

->的索引某个对象里面的某个成员(不是很明白)

九、子程序

划分子程序的一般原则:高内聚、低耦合

一个简单的子程序调用的例子

sub表示这是一个子程序,Hello是子程序名,程序内容用花括号括起来

调用的时候用子程序名就好,调用时的括号可以传递参数

参数的传递

在子程序内部,用@_访问这些传递的参数,@_[0]表示第一个参数,以此类推

返回值默认是最后一行的计算结果

数组的传递

数组需要放在标量的后面

哈希的传递(这里讲的不是很清楚)

子程序中的私有变量

使用my 来定义,其作用范围只在其所在的花括号内。上面哈希传递的例子就使用了my

子程序中的局部变量

当变量的当前值必须对被调用的子程序可见时,使用局部变量,用local声明。

全局变量(state变量)

十、指针

指针是一种标量数据类型,它保存了另一个值的位置,该值可以是标量、数组或哈希。凡是标量可以存在的地方,指针也可以存在,可以构成嵌套的数据结构——指针数组。

创建指针

使用反斜杠,或者利用方括号和花括号

指针的引用

如果不确定变量类型,可以使用ref函数,返回结果为下列之一

函数的指针

使用\&获得

十一、文件操作

与其他很多语言类似,通过将文件句柄与文件相关联,然后通过Perl中自带的函数来进行文件的读写等操作。

打开文件

读文件的不同模式:

注意如果以写入方式打开,文件中原本的内容会被清空

关闭文件

如果赋值给标量,从文件句柄返回第一行

如果赋值给数组,导入所有行

复制文件的例子

重命名文件

删除文件

十二、目录操作

通过一系列标准函数实现

显示一个目录下的所有文件

使用glob函数

此外还有,mkdir 创建一个新目录,rmdir 删除目录等

十三、错误处理

Perl可以用下面的语句检测错误,然后定位

第一种是用if。例如用下面的方法检测文件是否打开成功

warn函数,只是打印消息,并不会终止程序

die函数,打印消息,且终止程序

十四、特别变量

预定义的、具有特殊含义的变量

下面是一个例子。$_ 表示默认输入;常用在循环里面,表示当前次循环的输入

特殊变量的分类

有非常多的特殊变量,在遇到的时候再查询。下面仅仅是一些例子

$_ 默认输入

@ARGV 脚本输入参数列表

%ENV 脚本执行时候的环境变量

STDIN 标准输入 (全局特殊文件句柄)

__FILE__ 程序执行的当前文件 (全局特殊常量)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值