Perl概览
Perl最早由Larry Wall开发,是一种“胶水”语言,例如将上一个程序的输出做简单处理,转换为下一个程序的输入。第一版Perl发布于1987年12月18日,然后一直稳步升级,直到Perl 5. Perl 5是一个大升级,包含了一些对于Perl 4旧有语法的改进。该书写作之时的Perl版本是5.10.1。Perl仍在不断升级中,下一个大版本是Perl 6,Perl 6是全部重写的Perl实现,与之前的版本不同,完全由社区贡献代码。
Perl的宗旨是“不止一种做法”(TMTOWTDI, There’s More Than One Way To Do It.)。具有以下优点:
易于学习
代码可读性好
可移植(portable)
善于进行文本处理
Perl是高层语言(high-level language),无需像C/C++考虑诸多细节
第1章:初识Perl
Hello, World!
第一个Perl程序(helloworld.pl):
#!/usr/bin/perl
use warnings;
print "Hello, world!\n";
Perl将源码中# 之后到行尾的内容视为注释。而在Linux/Unix中,#!program 表示由program 处理该文本文件,因此首行写#!/usr/bin/perl 表示该文件由/usr/bin/perl 处理,若该文件有+x权限,则执行./helloworld.pl等同于执行perl helloworld.pl
开启警告信息
在源码开始处声明
use warnings;
或以-w参数调用perl运行.pl源码均可开启警告信息
调试
使用perl –d运行.pl可以调试
第2章:标量
Perl中的标量(scalar)是指单个的简单数据类型,例如整数、浮点数、字符串。字面量(literal)是一个常量,例如5. 变量是可以重赋值的标识符,所有变量以$开头,例如$number。
数字
Perl中可以用下划线为数字分段,例如10,000,000可以写作10_000_000
十进制数直接写,0开头八进制,0b开头二进制,0x开头十六进制
字符串
单引号对’’/双引号对””均可表示字符串,区别是单引号对中的字符串不处理转义符(’除外,\’表示’),例如print '\tThis is a single-quoted string.\n'; 输出\tThis is a single-quoted string.\n 而双引号对中的字符串处理转义符。
也可以用q//和qq//表示字符串(两/间为字符串内容),q//相当于单引号写法,qq//相当于双引号写法。除/外可以使用任何非字符、非数字的字符,例如|、#. 除此之外还可以使用{}、[]、()、<>这四种符号对。
可以用就地文档(here-document)在代码中包含大量文本。就地文档的格式是:
<<label
文档内容
label
其中label 可以是EOF或是EOT. 文档内容按照双引号写法的字符串内容处理。通常有字符串过长有多行时可用就地文档声明,例如:
print <<EOF;
This is a here-document. It starts on the line after the two arrows,
and it ends when the text following the arrows is found at the beginning
of a line, like this:
EOF
数字/字符串转换
"0.25" * 4 的值为1
hex() 函数将十六进制写法的数值字符串转换为Number类型
oct() 解析八进制写法的数值字符串
运算符
+、-、*、/、++、--、(、)、&、|、^、~、==、!=、&&、||、!、=、,同C/C++、Java
$a = $a <some operator> $b; 可以简写为$a <some operator>= $b; 例如$a=$a+$b可以写作$a+=$b同C/C++、Java
**是幂运算运算符,2**4=16
Perl中以下值是布尔值false:0(数字0)、”0”(字符串”0”)、””(空字符串)、Undefined、空表(empty list)
<=>运算符:a<=>b比较a和b的大小,a大为1,相等为0,b大为-1
字符串运算符:.为字符串合并算符,”ba”.”nana”->”banana”
通过x可以进行字符串乘法”ba”.(”na” x 2) ->”banana”
ord()可取得一个字符的ASCII值,例如ord(“f”)->102
变量
变量作用域为当前代码块以及该代码块内的所有子块。
通常情况下可任意声明、赋值变量。但这样存在一个问题,如果一开始声明$foo = 4; 而后面写成了$ofo = 7; 会使得代码工作不正确(而且还一下子发现不了)
可通过声明use strict;让Perl严格检查变量使用。使用未定义/初始化的变量将会导致编译错误。在strict模式下声明变量必须使用my关键字,例如my $record;. 为了代码规范易维护建议使用use strict
特殊变量:有一些特殊变量,例如$_代表了很多函数输入、输出的默认参数。关于特殊变量可参考perldoc perlvar
双引号中可使用变量,变量将会被代换为其值。例如
my $name = "fred";
my $salutation = "Dear $name,";
print $salutation, "\n";
输出
Dear fred,
标准输入<STDIN>
my $yen = <STDIN>; 从STDIN中读一次,每赋值一次就读一次
chomp()修改输入参数的指定的字符串,如果该串最后一次字符是换行符,则将其去掉,如果不是则不做修改
chop()函数移除输入字符串的最后一个字符
chomp()和chop()直接修改输入,无返回值
两个函数
exit()用于退出,exit()等价于exit(0),正常退出。exit(1)为带错误退出
die()用于报错退出,die接受一个字符串参数,将其打印至STDERR然后exit(1)退出两个函数
第3章:流程控制
与C/C++、Java相同的:
if(){…}else(){…}
for(init ; cond ; op ){…}
while(cond ){…}
do{…}while(cond )
无限循环while(1){…}
逻辑算符
字符串比较算符:gt(>)、lt(<)、ge(>=)、le(<=)、eq(==)、ne(!=) 注意括号内仅为注释,不可替代通用
defined($var)算符。如果$var已定义则为true,反之false.
可用and代替&&,or代替||,not代替!. 注意and/or/not的算符优先级与&&/||/!不同
if(){…}elseif(){…}elseif(){…}else(){…}可用于多分支流程控制
unless(cond )等价于if(!cond )
可以将
if ($number == 0) {
die "can't divide by 0";
}
写作
die "can't divide by 0" if $number == 0;
until(cond ){…}等价于while(!cond ){…}
foreach my $var list 可用于使用变量$var遍历列表list ,例如foreach my $number (1 .. 10) {…}
do{…}until(cond )等价于do{…}while(!cond )
Perl中的last等于C/C++、Java中的break,next等于continue
redo语句可以重启循环,从循环开始处执行。注意redo重启循环对于for和while/until并不进行条件检查,而是直接从头开始执行循环(个人理解,就是在next的基础上去掉条件检查)
循环标记。默认last、next、redo仅仅对所在的那一层循环有效。如果想跳至外层则需要使用标记:
OUTER: while ($i <= 5) {
my $j = 1;
while ($j <= 5) {
last OUTER if $j == 3;
print "$i ** $j = ", $i ** $j, "\n";
$j++;
}
$i++;
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com