《Beginning Perl》读书笔记1:0~3章
2012-04-28 16:30
281 查看
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++; }
相关文章推荐
- 《sip揭秘》读书笔记1
- 3章4节给变量赋值
- 读书笔记1 --Unicode
- [Linux设备驱动第三版]小记 [1-3章]
- 读书笔记1:简单工厂模式
- 《Effective java》读书笔记1——避免创建不必要的对象
- java核心技术8--笔记(1)_1到3章
- 《程序员的职业素养》读书笔记1
- [UNIX环境高级编程第二版]读书笔记3章
- 《Cocos2d-x 高级开发教程》读书笔记1:内存管理
- MyBatis 3章 MyBatis Spring Struts2 整合应用
- C++ primer习题笔记第1~3章
- python cook book第三版 读书笔记1(第一章)
- 《The Design and evolution of C++》读书笔记1
- 《机器学习与R语言》读书笔记1:机器学习简介
- 《软件方法》读书笔记1
- 3-3-行编辑程序-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- 软件工程-读书笔记(1-3章)
- hadoop 权威指南 2、3章读书笔记
- 作业和练习(1-3章,1-2天)