网站产品怎么优化,优化排名推广关键词,局域网建设网站工具,关于做网站公司周年大促销Perl脚本学习笔记 文章目录 Perl脚本学习笔记一、编写你的第一个Perl程序二、Perl的基本构件1.直接量2.标量变量3.表达式和运算符 三、控制程序流1.if 语句2.while 循环3.for 循环 四、列表与数组1.列表2.数组3.遍历数组4.数组排序 五、文件操作1.打开文件2.读取文件3.写入文件…Perl脚本学习笔记 文章目录 Perl脚本学习笔记一、编写你的第一个Perl程序二、Perl的基本构件1.直接量2.标量变量3.表达式和运算符 三、控制程序流1.if 语句2.while 循环3.for 循环 四、列表与数组1.列表2.数组3.遍历数组4.数组排序 五、文件操作1.打开文件2.读取文件3.写入文件 六、模式匹配1.元字符2.字符类3.分组和选择4.位置通配符5.替换6.连接运算符7.grep函数 七、哈希结构1.将数据填入哈希结构2.从哈希结构中取出数据3.列表与哈希结构4.关于哈希结构的补充说明 八、函数1.子例程2.参数3.作用域 总结 一、编写你的第一个Perl程序
#!/usr/bin/perl -w
#-w 可以报错
print Hello, World!\n;常用的扩展名是.pl或.plx,运行hello.pl,执行perl hello.pl 二、Perl的基本构件
1.直接量
Perl拥有两种不同类型的标量常量它们都称为直接量。一种是数字直接量一种是字符串直接量。 数字直接量都是一些数字Perl可以接受若干种不同的数字写法。 给字符串加引号有两种主要方法一种是使用单引号(’ )一种是使用双引号( )。 差别是使用单引号的字符串含义是非常直观的单引号字符串中的每个字符就是表示它自己的含义。在双引号中的字符串中Perl要查看是否存在变量名或转义字符。 perl还提供了另一个引号机制即qq和q运算符分别代替双引号和单引号。
qq(I said , Go then, and he said Im gone)
q(Toms kite wedged in Sues tree)2.标量变量
若要将标量数据存放在Perl中必须使用标量变量。在 Perl中如果要写一个标量变量可以写一个美元符号后跟变量的名字。 $a
3.表达式和运算符 字符串运算符 并置运算符用圆点来表示(.)
#!/usr/bin/perl
$aHello,World;
$b Nice to meet you;
$c$a . $b;
print $c\n;执行结果 重复运算符x 运算符x配有两个参数一个是要重复的字符串另一个是该字符串重复的次数。
#!/usr/bin/perl
$line - x 7
print $line\n;执行结果 单参数运算符 递增和递减
$counter;
$counter--;尖括号运算符 尖括号运算符(),也称菱形运算符主要用于读写文件。 STDIN 表达式返回从键盘读取的这行信息
#!/usr/bin/perl
print What size is your shoe?;
$sizeSTDIN;
print Your shoe size is $size,Thank you;STDIN表达式从键盘读取信息直到用户按下 E n t e r键为止。整个输入行返回并被存放在$size中。由 STDIN 返回的文本行也包含用户键入的换行符因为按下了 Enter键 。在大多数情况下你不希望在字符串的结尾处出现换行符。若要删除换行符可以像下面这样 使用chomp运算符
print What size is your shoe?;
$sizeSTDIN;
chomp $size;
print Your shoe size is $size, Thank you;数字关系运算符 字母关系运算符 逻辑运算符 文件测试运算符 三、控制程序流
1.if 语句
单if语句 适用范围只需要一步判断条件返回真干什么或者条件返回假干什么
if (condition) {commands;
}if-else 语句 适用范围两步判断条件为真干什么条件为假干什么
if (condition) {commands1;
} else {commands2;
}多重判断
if (condition1) {commands1;
} elsif (condition2) {commands2;
} else {commands3;
}2.while 循环
只要表达式是真的while循环就会重复执行该代码段
while (condition) {commands;
}3.for 循环
for (变量条件自增自减运算) {commands;
}明细控制 除了使用语句块、for、while 、if以及其他流控制语句来控制代码块以外还可以使用Perl语句来控制语句块中的流程。 last语句能够使当前正在运行的最里面的循环块退出。
#!/usr/bin/perl
$i0;
while ($i15) {last if ($i5);$i;print $i\n;
}执行结果 last 语句能够在$i的值是5时使while循环退出而不是在通常 while测试的结果是假时退出。当你拥有多个嵌套的循环语句时, last 将退出当前正在运行的循环。 next****语句使得控制权被重新传递给循环的顶部
#!/usr/bin/perl
for ($i0;$i100;$i) {next if (not $i%2);print An odd number $i\n;
}执行结果 该循环将输出从 0到98之间的所有奇数。如果 $ i是偶数那么 next语句将使该循环通过它的下一个迭代运行过程。 标号 Perl允许你给语句块和某些循环语句 for、while加上标号。也就是说可以在语句块或语句的前面放置一个标识符
OUTER while ($expr) {INNER: while($expr) {statement;}
}last、redo和next语句都可以带有一个标号作为参数这样就可以退出一个特殊的语句块。 exit语句是最后的一个流控制工具。当perl遇到exit语句时程序就停止执行perl将一个退出状态返回给操作系统。 四、列表与数组
1.列表
列表的语法是用一组括号将一些标量值括起来
(5, appel, $x, 3.14);qw运算符列表每个元素用白空间隔开
qw (5 apple $x 3.14);范围运算符由一对圆点来表示
#1~10之间的数列
(1..10);2.数组
#!/usr/bin/perl -w
#-w 可以报错
boyqw(Greg Peter Bobby);
girlqw(Marcia Jan Cindy);
kids(girl, boy);
print kids\n;执行结果 从数组中取出元素
#!/usr/bin/perl -w
boyqw(Greg Peter Bobby);
print $boy[0];//输出Grep
print $boy[1];//输出Peter
print $#boy;//输出2
#获得数组的大小
$sizeboy;
print $size;//输出3
print scalar(boy);//输出33.遍历数组
#!/usr/bin/perl -w
boyqw(Greg Peter Bobby);
for($index0;$indexboy;$index){
print My favorite is $boy[$index]\n
}#!/usr/bin/perl -w
boyqw(Greg Peter Bobby);
foreach $b (boy){print My favorite is $b\n
}执行结果 将标量转换成数组的方法之一是使用split函数。 Split函数拥有一个模式和一个标量并且使用该模式来分割该标量
worldssplit(//,The quick brown fox);执行结果
将数组转换成标量使用join函数
$numberjoin(,,(1..10));执行结果
4.数组排序
sort函数将一个列表作为它的参数并且大体上按照字母顺序对列表进行排序然后该函数返回一个排定顺序的新列表。
#!/usr/bin/perl -w
boyqw(Greg Peter Bobby);
print join( ,sort boy);执行结果 reverse函数能够对字符串的字符进行倒序操作返回倒序后的字符串。
#!/usr/bin/perl -w
boyqw(Greg Peter Bobby);
print join( ,reverse boy);执行结果 五、文件操作
1.打开文件
open函数用于打开文件句法如下
open(filehandle,pathname) || dieopen函数将文件句柄作为它的第一个参数将路径名作为第二个参数。路径名用于指明要打开哪个文件。 这一行代码可以读作“打开或撤消”它有时表示你想要让程序如何处理没有打开的文件。如果 open运行没有成功也就是说它返回 FALSE那么逻辑 OR(||)必须计算右边的参数(die)如果open运行成功了也就是说它返回TRUE那么就不要计算die的值。 close 函数关闭句柄 当完成文件句柄的操作后将文件句柄关闭这是个很好的编程习惯。 打开file.txt文件当试图打开没有设定目录名的文件名时Perl假定该文件是在当前目录中。若要打开位于另一个目录中的文件必须使用路径名。
#!/usr/bin/perl -w
open(MYFILE, /home/liuy/Scripts/perl/file.txt) || die
close (MYFILE)特殊变量 $! ,在字符串上下文中返回来自你的操作系统的相应出错消息。
#!/usr/bin/perl -w
open(MYFILE, /home/liuye/Scripts/perl/file1.txt) || die $!
close (MYFILE)执行结果
2.读取文件
使用文件输入符 若要读取文件句柄只需要将文件句柄放入尖括号运算符中将该值赋予一个变量。
#!/usr/bin/perl -w
open(MYFILE, /home/liuye/Scripts/perl/file1.txt) || die $!;
$lineMYFILE;
close (MYFILE);
print $line;3.写入文件
open(filehandle,pathname) //改写
open(filehandle,pathname) //追加写入操作
print filehandel LISTfilehandel是要将数据写入到的文件句柄 LIST是要写入的数据的列表
#!/usr/bin/perl -w
open(MYFILE, /home/liuye/Scripts/perl/file.txt) || die $!;
contentsqw(this is a cat);
print MYFILE contents;
close (MYFILE);六、模式匹配
简单的模式匹配运算符m/ /
1.元字符
. 圆点用于匹配除了换行符外的任何单个字符
\ 在字符前面加上一个反斜杠使它失去“元”的含义用于使前面的字符与后面的字符至少匹配一次
* 前面的字符可以进行 0次或多次匹配
? 用于使前面的字符进行 0次或一次匹配
.* 用来匹配任何东西
{n,m} 根据需要的具体次数进行匹配,n是匹配的最小次数,m是匹配的最大次数/x{5,10}/ x至少出现5次但是不超过1 0次
/x{9, }/ x至少出现9次也可能出现更多次
/x{0,4}/ x最多出现4次也可能根本不出现
/x{8}/ x必须正好出现8次2.字符类
若要编写一个字符类可以用方括号[ ]将这些字符括起来在字符类中大多数通配符会失去它们的“通配符性质”因此* 实际上代表一个普通的字符。 如果插入记号 ^作为字符类中的第一个字符该字符类将变为无效
/[^A-Z]/ 匹配不在A-Z的任意字符3.分组和选择
当可能的匹配项之间用一个 | 字符隔开时正则表达式中就出现了选择
#这个字符串包含dogs还是cats
if (/dogs|cats/) {
print \$_ contains a pet\n;
}
可以对括号进行嵌套使一个组中包含另一个组
/(fl|b|fl|cl)og/4.位置通配符
第一个位置通配符是插入记号 ^ 与它相对应的通配符是美元符号 $
5.替换
替换运算符 s / / /
s/search/replace/6.连接运算符
连接运算符 ~ 如果要对非 $ _的变量使用匹配运算符和替换运算符则必须将它们与该变量连接起来
$weight185 lbs;
$weight~s/lbs//;7.grep函数
grep搜索数组寻找某些模式 grep不一定必须与模式匹配或替换运算符一道使用它可以与任何运算符一道使用下面这个例子用于检索长度超过 8个字符的犬名
#!/usr/bin/perl -w
dogsqw(greyhound blooshound terrier mutt chihuahua);
houndsgrep /hound/, dogs;
longdogs grep length($_)8, dogs;
print hounds\n;
print longdogs\n;执行结果 七、哈希结构
哈希是Perl中的第三种基本数据类型。与数组一样哈希包含了许多个标量。数组与哈希的差别是哈希是按照名字来访问它们的标量的而不是像数组那样使用数字标号进行访问。 哈希元素包含两个部分即一个关键字和一个值。关键字用于标识哈希的每个元素而值则是与该关键字相关的数据。这种关系称为关键字值对
1.将数据填入哈希结构
哈希变量是以百分比符号(%)来标识的。 若要创建哈希元素只需要将值赋予这些元素即可这与创建数组的元素很相似。
$food{apple}fruit;//关键字是apple值是fruit
$food{pear}fruit;P e r l有一个特殊的运算符称为逗号箭头运算符即 。使用运算符同时利用Perl忽略白空间的特性就能够编写下面这样的哈希结构的初始化代码。
%food(key1 value1,key2 value2);2.从哈希结构中取出数据
key函数来检索作为列表返回的哈希结构的所有关键字。 若要输出该哈希结构中的所有电影名字可以使用下面的代码
foreach $film (keys %Movies){print $film\n;
}values函数来检索哈希结构中存放的所有值。
foreach $film (values %Movies){print $film\n;
}Directorsvalues %Moves;
Filmskeys %Moves;3.列表与哈希结构
若要拷贝一个哈希结构只需要像下面这样将这个哈希结构赋予另一个哈希结构即可
%New_Hash%Old_Hash;当你将 % Old_Hash置于哈希初始化代码的右边时 Perl通常希望右边是个列表或数组),Perl便将哈希结构转换成一个列表。可以像处理列表那样将几个哈希结构组合起来并对它进行操作。
%Both(%First,%Second);
%Additional(%Both,key1 value1,key2 value2 );4.关于哈希结构的补充说明
exists函数可以用于测试哈希结构中是否存在哈希关键字如果存在便返回真否则返回假。
if (exists $Hash{keyval}) {:
}delete函数删除单个哈希关键字。
delete $Hash{keyval};若要从哈希结构中删除所有关键字和值只需要将哈希结构初始化为一个空的列表即可。
%Hash();八、函数
在 Perl中用户定义的函数称为子例程。与 Perl的内置函数一样用户定义的函数也可以拥有参数并且可以将值返回给调用者
1.子例程
sub function_name {statement;
}
#调用子例程
function ();
或
function ();子例程的返回值是子例程中计算的最后一个表达式的值或者是return语句显式返回的值。
2.参数
若要传递子例程的参数可以使用下面任何一个语句。
subname (arg1, arg2, arg3);
subname (arg1, arg2, arg3);
subname arg1, arg2, arg3;只有当Perl已经遇到子例程的定义时才能使用上面不带括号的第三种参数形式。 在子例程中被传递的参数可以通过Perl的特殊变量 _ 来访问。
sub printargs{print join(,, _);
}
printargs(market, home, roast);若要像下面这个例子中那样访问传递过来的各个参数可以使用数组 _上的下标。 $ _ [0] (_的一个下标)与标量 $ _毫不相干
sub print_third_argument {print $_[2];//取第三个参数
}3.作用域
my操作符使变量成为函数的专用变量。
sub moonweight {my $weight;($weight)_;return ($weight/1.66667);
}Perl语句use strict它能够激活更严格的 Perl使你能够避免在编程中出现错误。 总结
参考文献Perl编程24学时教程