perl编程入门学习笔记《Learning Perl》学习笔记

发布时间:2020-03-08编辑:脚本学堂
本文详细介绍了,有关《perl编程入门》这本书的学习笔记,如果你参照本文的提纲性笔记去学习《Learning Perl》,相信会进步很快的,有兴趣吗?快来看看吧。
譬如:
 

复制代码 代码示例:
if ($wilma =~ /(w+)/) {
my $wilma_word = $1;
...
}

在Perl中,有三个系统定义的模式匹配变量,即你无须自己定义这些变量即可使用它们:
 

$`:保存正则表达式引擎在找到匹配之前需要跳过的部分;
$&:保存实际与模式匹配的那部分字符串;
$':保存模式没有到达的字符串的剩余部分;

将这三个字符串按顺序连在一起,你总会得到原字符串:$`$&$'。

5.用s///进行替换

使用s///可以用一个替换字符串来替换一个变量匹配模式的部分,譬如:
 

$_ = "He's out bowling with Barney tonight.";
s/Barney/Fred/; # 用Fred替换Barney
s///有一个返回值,如果替换成功,则返回真;否则,返回假。
和m//类似,s///可以使用绑定操作符=~ 改变匹配的变量,譬如:
$file_name =~ s/Barney/Fred/; #在$file_name中查找Barney并将其替换为Fred
和m//类似,s///也可以使用不同的定界符,此处不再赘述。
和m//类似,s///使用一组标志符来改变缺省行为:
/g:进行全局替换,如果没有这个标志,则s///仅替换匹配的第一个模式;
/i,/s:用法和m//中的类似,此处不再赘述;

6.大小写转换

在替换时,可能经常希望替换字符采用了合适的大写(或小写,依需要而定)。这很容易用Perl来完成,即通过一些反斜杠转义。

U转义符强制后面的字符都用大写,譬如:
 

复制代码 代码示例:
$_ = "I saw Barney with Fred";
s/(fredbarney)/U$1/gi; #$_现在是"I saw BARNEY with FRED."

L转义符强制后面的字符都用小写;

缺省情况下,U和L会影响其后的所有(替换)字符串,除非使用E关闭大小写转换,譬如:
 

复制代码 代码示例:
$_ = "I saw Barney with Fred";
s/(w+) with (w+)/U$2E with $1/i; # $_现在是"I saw FRED with Barney."

当写成小写的形式时(l和u),它们只影响下一个字符,譬如:
 

复制代码 代码示例:
$_ = "I saw barney with fred";
s/(fredbarney)/u$1/gi; # $_现在是"I saw Barney with fred."
uL(或Lu)表示全部小写,但是第一个字符大写;

7.split操作符

split操作符把一个字符串按照分割子(separator)分开。格式如下:
 

复制代码 代码示例:
@result = split /separator/, $string;

split操作符在字符串中用模式/separator/扫一遍,返回一个由分割子分割的字段(子字符串)的列表。每当模式匹配时,就是一个字段的结束和下一个字段的开始,因此,任何可以匹配模式的东西都不会出现在返回的字段中。譬如:
 

复制代码 代码示例:
@result = split /:/, "abc:def:g:h"; # @result = ("abc", "def", "g","h")

8.join函数

join函数完成split操作符相反的功能:split把一个字符串分成若干片段,而join则把一组片段粘合起来形成一个字符串。格式如下:
 

复制代码 代码示例:
my $result = join $glue, @pieces;

join的第一个参数是粘合串,它可以是任何字符串。另一个参数是由片段组成的一个列表,join把粘合字符串放在片段之间。譬如:
 

复制代码 代码示例:
my $x = join ":", 4,6,8,10,12; # $x = "4:6:8:10:12"

第十章 不常用的条件控制语句

第十一章 文件句柄和文件测试

本章介绍如何读写文件及测试文件的类型,是日常编程中重要的内容。

1.文件句柄的概念
文件句柄(filehandle)是Perl程序中的一个名字,表示你的Perl进程与外面世界的I/O连接。
也就是说,它是一个连接的名字,并不一定是一个文件的名字。

文件句柄
文件<====================>进程

2.文件句柄的命名
命令文件句柄的方式和其它Perl标识符一样(字母、数字和下划线,但不能以数字开始),
但文件句柄名没有前缀字符。为了避免和Perl的保留字(关键字)冲突,一般文件句柄名全部用大写字母。

3.打开一个文件句柄【or是否则的意思】
open MYFILE " > myfile" or die "Cannot Create myfile:$!";

其中,MYFILE是文件句柄名,myfile是实际的文件名,>表示向该文件中写入数据(<表示从该文件中读取数据,>>表示向该文件中追加数据);

若打开文件出错,会执行die语句,终止程序执行,并给出错误信息,$!用于给出错误信息。

4.关闭一个文件句柄
close MYFILE;

5.使用文件句柄
一旦打开了一个文件句柄,就可以读入行,像使用STDIN从标准输入读取一样,譬如:
 

复制代码 代码示例:
open MYFILE " > myfile" or die "Cannot Create myfile:$!";
while (<MYFILE>) {
...
}
 

一个为写入或追加而打开的文件句柄可以和print或printf一起使用,紧跟在其后但在参数列表之前:
 

复制代码 代码示例:
print LOG "Captain's log, stardate 3.14159n"; # 输出到LOG
print STDERR "%d percent complete.n", $done/$total*100;

6.文件测试
Perl有一组完整的测试,可以用它们了解文件的信息,譬如某个文件是否存在,是否可读、可写等。
所有的文件测试都有一个短横和一个字母,它们是测试的名字,后面是一个要测试的文件名或文件句柄,
一般会返回一个真/假值。用法如下:

if (-e $filename) {
...
}
常用的文件测试及它们的含义:
 

-r : 文件或目录对该用户或组可读
-w : 文件或目录对该用户或组可写
-x : 文件或目录对该用户或组可执行
-o :文件或目录被该用户所有
-e :文件或目录存在
-z :文件存在,大小为零(对目录总为假)
-s :文件或目录存在,大小非零(单位为字节)

-f :条目是个普通文件
-d :条目是个目录