Perl6读书笔记
- 格式:pdf
- 大小:775.28 KB
- 文档页数:30


Perl5. 输入与输出输入读取标准输入行输入操作符 钻石操作符 <>调用参数 @ARGV行输入操作仅在while循环的条件中,才会保存在$_中输出print & sayprint加括号的规则printf格式化输出数组和printf文件句柄STDIN,STDOUT,STDERR,DATA,ARGV,ARGVOUT文件句柄的打开与关闭die & warn重新打开文件句柄6. 哈希哈希元素的存取访问hash 元素引用整个hash %hash_namehash赋值 => my %hash = (“a”=>1, “b”=>2, “c”=>3);哈希函数keys 和values 函数each函数 一般只在while循环中使用eachsort函数 对哈希进行排序输出哈希的通常用法exists函数delete函数hash 元素的内插 可以在双引号的字符串中使用单个hash 元素,但不支持整个hash的内插%ENV 哈希 环境变量哈希7. 正则表达式元字符. 通配符它可以匹配任何单个的字符,但不包括换行符(\n)适用于单行查找,因为不包括换行符\ 反斜线是第二个元字符。 如果需要真正的反斜线,需要重复使用两个反斜线。转义( ) 括号......所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。量词* 星号 可以匹配前一项0次或多次+ 加号 可以匹配前面一项的一个或多个,至少是一个 问号 前面一个项出现一次,或者不出现.* 匹配任意字符任意多数(不包括换行符)选择符| 竖线 or 是匹配左边的或者右边的。如果竖线左边没有匹配上,则匹配右边。字符类字符类,是方括号[]中的一列字符,可以匹配上括号内出现的任意单个字符。 它匹配一个字符,但这个字符可以是列中的任意一个。字符类前使用符号^将取此字符类的补集 字符类简写形式的补集^\d 或 \D 非数字的字符 ^\w 或 \W 非word(记住我们对word 的定义)的字符 ^\s 或 \S 非空白的字符字符类的简写\d 任何数字的类,[0-9],可以被简写为:\d。\w "word字符""words"通常由字母,数字,下划线组成\w 不能匹配单词,而只能匹配单个字符\s 匹配空白 \s* 匹配任何个数的空白(包括没有) \s+匹配一个以上的空白 含5 个空白字符:格式符(form-feed),制表符(tab),换行符,回车,以及空格符。 反向引用??/1 /2/g8. 正则表达式的应用使用m//匹配//是m//的一种简化(缩写)形式可选的修饰符/i 不区分大小写/s 匹配任何字符 它将模式中点(.)的行为变成可以匹配任何字符,包括换行符。/x 添加空格允许你在模式中加入任何数量的空白,以方便阅读在模式中加注释的时候使用/x/m 多行匹配当模式加上/m修饰符之后,就可以用它们匹配字符串内的每一行它代表的位置是每行的开头和结尾可以将可选字符结合起来锚定字符串的两头^ 脱字字符 表示在字符串的开头进行匹配$表示在字符串的结尾进行匹配/A匹配字符串的绝对开头也就是说,如果字符串开头处匹配失败,不会顺移位置继续尝试匹配/z 匹配字符串的绝对末尾/Z 行末锚位 它允许后面出现换行符词锚定\b 词界符 是针对单词使用的\B 非词界锚定 它将在任何非\b 匹配的点上进行匹配绑定操作符=~使用绑定操作符(=~)将告诉Perl 将右边的模式在左边的字符串上进行匹配,而非对$_匹配。默认的是对$_进行匹配模式内的内插匹配变量如果使用了括号,则这些括号所匹配的字符串将放在相应的内存变量之中($1,$2...)之中。 $4 是指第四对括号所匹配的字符串;$&是匹配的全部 匹配变量可能是空的命名捕获??$+,哈希内存值的保存自动匹配变量$`$& $&是匹配的全部;$4 是指第四对括号所匹配的字符串$'一般的数量词{5,15} 匹配出现5-15次{5,} 匹配出现5次及以上的星号(*)等同于{0,},表示0 个或多个。加号(+)等同于{1,},表示1 个或多个。{5} 匹配出现5次的 问号(?)则等同于{0,1}。优先级1.在此优先级表的最顶端是括号:( ) 在分组和引用内存值的时候使用。括号内部的任何部分比括号外的部分结合更紧密。2.第二级是数量词。这里有星号(*), 加号(+),问号(?)以及由花括号表示的数量词,如{5,15}, {3, }, {5}等。它们通常和前一项元素结合。3.第三级的是锚定和序列(sequence)。 锚定包括(^) 表明字符串的开头,($)表明结尾,(\b)词界符,(\B)非词界符。 序列(一个元素紧接着一个元素)实际上是一种操作,虽然它没有使用元字符。这段话的含义是一个单词中的字母结合更紧密,就像锚定紧贴字母一样。4.优先级最低的是竖线(|),表示或。 由于其优先级最低,它通常将模式划分成几个部分。它在优先级最底端是因为我们希望像|/fred|barney/里面的字母比或(|)结合更紧密。 如果或(|)的优先级比序列的优先级更高,那么,上述模式的含义是匹配fre,接着是d 或者b, 然后是arney。 因此,或(|)的优先级最低,字母序列的优先级要高些。Perl在模式中使用的所有的元字符模式测试程序9. 使用正则表达式处理文件使用s///进行替换s///值进行一次替换,无论是否还有地方还能匹配上。当然,这只是默认的行为。/g使用/g 进行全局替换修饰符/g 要求s///将不相重叠的所有匹配上的部分都进行替换不同的分隔符非配对分隔符配对分隔符一对存放模式,一对存放替换的字符串。此时,分隔符甚至可以是不同的。可选的修饰符除了/g 修饰符外,替换操作中还可以使用/i, /x, 和/s,这些在普通的模式匹配中已经出现过的修饰符。 其顺序是无关紧要的。绑定操作大小写转换\U 要求紧接着的均是大写\u \l 使用小写形式时(\l 和\u),只作用于下一个字符:\L 要求紧接着的均是小写\E 默认时,大小写会影响到剩余的(替换的)字符串。可以使用\E 来改变这种影响:这些在替换中出现的大小写转换的修饰符,也可在双引号中使用:spilt操作join函数列表上下文中的m//更强大的正则表达式非贪婪量词更为别致的单词边界符\b{wb}它认为撇号后的字符不是独立的单词,应该和之前的部分一起成为一个单词\b{sb}\b{lb} 行边界符跨行模式匹配一次更新多个文件钻石操作符 <> $^I从命令行直接替换文件内容-p选项-n选项-i.bak-w选项-e选项10. 其他控制结构unless控制结构until控制结构颠倒while循环的条件表达式这个循环会一直执行,除非条件为真表达式修饰符裸块控制结构为临时变量限定作用域如果某个变量只会在几行代码里使用,可以把这几行放到一个裸块里并就近声明变量elsif子句自增与自减for控制结构foreach和for之间的秘密关系循环控制操作符last操作符 (break)立即中止循环的执行last操作符只会对当前运行中的最内层的循环块发挥作用next操作符 (continue)结束当前这次循环迭代,继续执行循环的下一次迭代只会对当前运行中的最内层的循环块发挥作用redo操作符它会调到当前循环块的顶端,不进行条件表达式判断以及接着本次循环。只会对当前运行中的最内层的循环块发挥作用带标签的块如果需要从内层对外层的循环块进行控制,就使用标签next 和redo 的最大区别在于, next 会进入下一次循环,而redo 会继续执行本次循环。条件操作符: 三目操作符逻辑操作符短路操作符逻辑与操作符 &&逻辑或操作符 ||常常利用逻辑或操作符提供变量的默认取值就是给一个未定义的变量赋初值,若已定义则保留其原值短路操作符的返回值短路操作符的返回值不只是简单的布尔值,而是最后运算的那部分表达式的值// 定义或操作符使用部分求值操作符的控制结构Perl中有5个循环块:for、foreach、while、until、裸块
9.3.1原则1
正则表达式有三种形式:匹配、替换和转换。
在表 9-1 中列有三种正则表达式运算符。
接下来对每一个表达式给出详尽解释。
匹配:m//这种形式表明在//内部的正则表达将用于匹配 = ~或 !~左边的标量。为了语法上的简化用//,略去m。
替换:s///这种形式表明正则表达式将被文本 替换,为了语法的简化用//略去s。
·转换:tr///这种形式包含一系列的字符—/—同时把它们替换为。
注意转换并不真正是一个正则表达式,但是对于用正则表达式难于处理的数据常使用它来进行操纵。因此,tr/[0-9]/9876543210.组成1223456789,987654321等字符串。
通过使用=~(用英语讲:does,与“进行匹配”同)和!~(英语:doesn't,与“不匹配”同)把这些表达式捆绑到标量上。作为这种类型的例子,下面我们给出六个示例正则表达式及相应的定义:
$scalarName =~ s/a/b; # substitute the character a for b, and return true
if this can happern
$scalarName =~ m/a; # does the scalar $scalarName have an a in it?
$scalarName =~ tr/A-Z/a-z/; # translate all capital letter with lower case
ones, and return ture if this happens
$scalarName !~ s/a/b/; # substitute the character a for b, and return false
if this indeed happens.
$scalarName !~ m/a/; # does the scalar $scalarName match the character
perl 使用方法
Perl是一种高级编程语言,它被广泛应用于Web开发、系统管理、数据处理等领域。本文将介绍Perl的使用方法,帮助读者快速上手。
一、Perl的安装与配置
1. 下载Perl的最新版本,官方网站提供了多种操作系统的安装包。
2. 双击安装包,按照提示完成安装过程。
3. 配置环境变量,将Perl的安装路径添加到系统的PATH变量中。
二、Perl的基本语法
1. 注释:在Perl中,以"#"开头的行表示注释,不会被解释执行。
2. 变量:Perl中的变量使用"$"符号进行标识,可以存储各种类型的数据。
3. 标量:标量变量存储单个值,可以是字符串、数字等。
4. 数组:数组变量存储一组值,使用"@"符号进行标识,可以通过下标访问其中的元素。
5. 哈希:哈希变量存储键值对,使用"%"符号进行标识,可以通过键访问对应的值。
6. 控制结构:Perl支持if-else、for、foreach、while等常见的控制结构,用于实现条件判断和循环操作。
三、Perl的字符串处理
1. 字符串连接:使用"."符号可以将两个字符串连接起来。 2. 字符串截取:使用substr函数可以截取字符串的一部分。
3. 字符串替换:使用s///操作符可以替换字符串中的某个子串。
4. 字符串分割:使用split函数可以将一个字符串按照指定的分隔符拆分成多个子串。
5. 字符串匹配:使用正则表达式可以进行强大的字符串匹配操作。
四、Perl的文件操作
1. 打开文件:使用open函数可以打开一个文件,并返回文件句柄。
2. 读取文件:使用<>操作符可以从文件句柄中读取一行内容。
3. 写入文件:使用print函数可以向文件句柄写入内容。
4. 关闭文件:使用close函数可以关闭文件句柄。
五、Perl的模块和包管理
1. 模块安装:Perl的CPAN(Comprehensive Perl Archive
perl 循环二维数组
在Perl中,二维数组可以被视为数组的数组。我们可以创建一个二维数组,然后使用循环来遍历并操作它。下面,我们将介绍如何创建二维数组、如何循环遍历二维数组、如何打印其元素以及如何修改它。
在Perl中,我们可以使用以下语法创建一个二维数组:
这会创建一个包含三个数组的二维数组。每个内部数组都包含三个元素。我们可以使用两个嵌套的foreach循环来遍历二维数组。外部循环迭代数组的每个子数组,而内部循环迭代子数组中的每个元素。例如:
这会打印出每个元素以及其对应的子数组。输出如下:
下面是一个简单的示例,展示如何打印二维数组的元素:
输出:
我们还可以修改二维数组中的元素。例如,下面的代码将每个元素的值翻倍:1. 二维数组的创建
my @array = ([1, 2, 3], [4, 5, 6], [7, 8, 9]);
2. 循环遍历二维数组
foreach my $sub_array (@array) { foreach my $element (@$sub_array) { print "$element "; } print "\n";}
1 2 3 4 5 6 7 8 9
3. 示例:打印二维数组的元素
my @array = ([1, 2, 3], [4, 5, 6], [7, 8, 9]);foreach my $sub_array (@array) { foreach my $element (@$sub_array) { print "$element "; } print "\n";}
1 2 3 4 5 6 7 8 9
4. 示例:二维数组的修改现在,@array中的每个元素都已翻倍。请注意,我们没有打印或输出修改后的数组,因为我们只是简单地修改了原始
数组。你可以根据你的需求进一步处理或显示修改后的数组。my @array = ([1, 2, 3], [4, 5, 6], [7, 8, 9]);foreach my $sub_array (@array) { foreach my $element (@$sub_array) { $element *= 2; # 将元素值翻倍 }}