使用内建警告信息
在运行时,加上 -w
¥perl -w my_program
#!/usr/bin/perl/ -w
#!/usr/bin/perl
use warinings
use diagnostics 如果要查看更详细的信息可以用这个
use strict 强制终止程序的执行直到程序问题被解决
1、会避免错误拼写
2、限定变量的范围
如何使用帮助文档perldoc
标量$
数字标量 全部为双精度浮点数
$data = 10;
$data = 10.00;是一样的,都会被转到双精度浮点
较长的,可以用下划线隔开(跟verilog一样)
非十进制
八进制 0开头
16 :0x 0xFF
2 :0b 0b111111
字符串标量
$data =“HEllo” 单双引号可以灵活运用
标量的声明
可以在任意时刻随时声明,默认值为空
作用域
包变量:perl中的package是一个包,在默认的情况下,标量是包内的全局变量
私有变量:
my变量,本层模块{}之间可以
local变量,本层已经本层之下的模块,子函数,可以
数组
是标量的一中合集
以@作为标识,从0到全部占满内存
列表直接量
(1,2,3) ##包含1,2,3的列表
(1,2,3,)##最后,会被省略
(“test”,1,2)
可以用“…"产生,每次加1
(1…5) ##1,2,3,4,5
(5…1) 空列表
纯字符串使用qw,可以省略“”
qw(fajfdls,fafasf,fdafs)
数组之间赋值
特殊数组赋值
通过索引访问数组元素
特殊索引值
引用
变量、变量名、地址
软引用
根据不同的指令,区分到底是引用的是标量还是数组
硬引用
标量可以省略{},但是数组不行
要区分的是引用和拷贝的区别,引用的话,修改引用的值,会影响原件,但是拷贝的话,修改拷贝后得值,不会影响原件。
下面展示一些 内联代码片
。
最后改变结果是 hello >hello2,而没有hello3
//
my $scalar = "hello";
my @array = ("hello","world","123");
my $scal_ref = \$scalar;
my $arr_ref = \@array;
##copy
my $scal_com = $scalar;
my $ array_0 = $array[0];
$$scal_ref = "hello2";
${$arr_ref}[0] = "hello2";
$scalar_com = "hello3";
$arr_ref = "hello3";
数据运算
运算符
算数运算符
用字符串做四则运算,从左往右看数字,第一位都不是数字的直接为0
乘幂操作 :**
取余
单目操作
单个单目符要用括号
比较
前大于后 1 一样0 小于 -1
逻辑
和verilog一样
逻辑与只要两个不是0.则与出来是1
位运算符
左移的时候会自动增加位数,剩下的补零
右移的话,也是剩下的补零
不要用在负数
赋值
逗号运算符
条件运算符
运算符的优先和结合
perl控制结构
最后一种情况执行语句只能是一个
foreach
将一个数组赋值给字符串实际上是赋值数组的个数
对item修改的话,也是对array修改。
$_ :默认变量
foreach取得元素的方式是随机的
按照从小到大进行排列
其他控制
while
1、计数控制
2、特殊值控制
3、用户交互值控制
循环的跳出仍然用last
until:条件为假的时候,既要执行until 也要执行continue
如果条件为真,until和continue都不执行
switch控制
switch(条件)
case 条件1:执行;
。。。
default 执行语句
back goto back
perl正则表达式 匹配的作用
简单模式
$`: 匹配部分的前一部分字符串
$&: 匹配的字符串
$’: 还没有匹配的剩余字符串
如果有world,则返回值就是1.就会打印,如果匹配项本身有/,就要用反斜线
换行符也是space
+表示重复,world+ 则是worlddddddd
用|来表示或
元字符
元字符是一中特殊字符
在它前面加上/,则这些元字符代表自己本身的含义
字符类
模式匹配
m//
//
m?//?
用$1代表第一个括号,$0又特殊含义,代表整个程序
模式匹配的选项
/g 忽略所有可能的模式
如果不加g,第一种情况只匹配一次。返回1或者零
/i 忽略大小写
/m 将字符串视为多行
/s 将字符串视为单行
/x 忽略空格
模式替换返回为布尔量,如果进行替换,就返回1
s//
s??
/e 就是把字符串进行计算之后
模式转化
tr//
模式替换是将整体abc替换,
模式转换是单个的进行替换
返回值是返回被替换的个数
如果前面的字符个数比后面多,多出来的都转为最后一个C
/c 将未指定的替换为一个空格
/d 删除
/cs c 把未指定的转为为空格,s是将多个空格转为一个
正则表达式的原则
原则二:只是对标量进行匹配
原则三:默认只匹配/替换一次,且对象为最早的匹配
原则5 结果状态和反向应用
原则6 核心能力在于通配符和多重匹配运算符
原则7 用|来增加灵活性
原则8 用?给正则表达式提供扩展功能
括号里是前面接着的
如果没有,则匹配上。和 ?=相反
括号里面没有存储,本身不参与匹配。
实例
;
列表直接赋值:
key是键,value是值
用=>来代替,可以看除键与值之间的对应关系
指定键进行赋值
$hash{“key1”} = value1;
$hash{“key1”}{“key3”} = value2;
%hash_A = %hash_B;
B中的值改变了,A中的值不会改变。
多维hash的赋值用括号来标识;
获取Hash的长度
哈希的排序,使用sort排序
子程序在前面,则不用&
** 前向引用**
用do来调用
外参数和内参数对应
传递数组参数
1是因为print成功了,有返回值
如果是一个标量+一个数组,是没有合并的
my 标量,只在所处block,子函数里面看不到
local 在子函数可以看到
number2在子程序看不到,但是@是赋值的,赋值到子程序就可以看到
子程序之间的变量交互
通过引用来传递变量
引用是地址,其中一个子程序对引用的数据改变的话,另外一个子程序就可以拿到最新的数据。
@ 在某个函数内,数组 @_ 包含传递给该函数的所有参数。
默认的输入/输出和格式匹配空间1.@是函数传参时放置参数的数组,可以从中取实参,比如my(_ 默认的输入/输出和格式匹配空间
1.@_ 是函数传参时放置参数的数组,可以从中取实参,
比如 my(默认的输入/输出和格式匹配空间1.@是函数传参时放置参数的数组,可以从中取实参,比如my(para1,para2...)=@,函数调用时填了几个参数,便可以从该数组中取到几个参数。2.para2...)=@_, 函数调用时填了几个参数,便可以从该数组中取到几个参数。
2.para2...)=@,函数调用时填了几个参数,便可以从该数组中取到几个参数。2._ 是默认参数的意思,指的是在不指定的情况下,程序处理的上一个变量,比如
open(IN,"<file.txt")
while()
{
print $_;
}
close(IN);
实例
my $numer = @ $ref 是取得数组元素的个数
perl文件处理
perl句柄
打开文件
读写文件
文件测试运算符
综合实例
句柄是一种特殊的数据类型
STDIN
STDOUT
STDERR
自定义句柄
打开文件
如果没有指定绝对路径,只会在当前路径找
用正斜线
die函数
$!
warn 不会终止程序
文件的读取
文件读取操作符,只能操作一次,也就是每次都输出一行,
也可以用数组一次性接收全部的内容,但是大文件的话,占用内存太大
追加模式 换行
关闭句柄
二进制文件的模式
把ASIC码转为二进制
文本测试运算符
在写文件之前看是否可以写
-M是指被修改以来的日期
综合实例